在Node JS中引入模块时不使用var关键字

7

{这与 Twitter 没有任何关系}

这是一个有趣的问题,有趣之处在于它可能很蠢,你可以笑一笑,但至少我会有个答案来解决这个烦恼。

目前我使用

var Bootstrap = require('library/Bootstrap');
Bootstrap.run();

当真正伟大的事情是如果我可以在Bootstrap index.js中做如此的事情。
module.exports.Bootstrap = My_Bootstrap;

并且像这样随意称呼它为“威利尼利”
require('library/Bootstrap');
Bootstrap.run();

不需要再声明另一个变量到我的空间,有没有一种方法可以做到这一点,或者我只是盯着屏幕想入非非,迷失方向,浪费时间?

编辑 最终我做的是:

我创建了一个单一的全局对象,并只将重要的模块添加到其中,以便可以访问和实例化。 这证明是一个令人惊异的答案和解决方案,非常方便。

3个回答

7

你可以修改global对象。这类似于浏览器上的window对象。因此,你可以编写以下模块包装器:

global.Bootstrap = My_Bootstrap

全局对象在模块之间共享。因此,您可以在任何地方使用 Bootstrap

这是一个很好的建议(呃!)我稍后会尝试一下!谢谢你,Node 社区的伙伴! - Dave Mackintosh
3
请记住,模块有帮助的原因之一是因为污染全局命名空间可能会很丑陋。 - loganfsmyth
明白了,我只是在看看我的选择。说实话,我写的只是Bootstrap和Autoloader,我认为这是可以接受的污染! - Dave Mackintosh
5
不要这样做。如果你加载你的模块,人们会因为混乱了全球空间而讨厌你。 - ThiefMaster

1

不行,你必须先声明变量。虽然你可以进入 require 函数,但你可以让它为你完成这项工作。我对 Bootstrap 的内部结构并不是非常熟悉,但似乎这种写法应该可以解决问题:

// put this in some out-of-the-way cubbyhole somewhere
var oldRequire = require;
function require(path) {
    Bootstrap = oldRequire(path);
}

// and this would go in your main file
require("library/Bootstrap");
Bootstrap.run();

我之前认为这是不可能的,但我们都可以梦想 :) 如果他们能够实现这个功能,那将是一个非常棒的惊喜!支持你的建议(虽然它与Twitter无关 ;))。 - Dave Mackintosh
2
这不是一个非常好的想法,你不想为了自己的“使所有东西全局化”(至少对于文件而言)的方法覆盖Node已经很好地设计的模块加载。 - Forbesmyester

1

您不能按照您所说的方式进行操作,那意味着需要使用全局变量,这几乎肯定不是您想要的。

然而,您可以这样做:

require('your_library').call(this,arg1,arg2);

例如,您可能正在使用node-validator库。
您应该像这样使用它:
sanitize = require('validator').sanitize
var str = sanitize('aaaaaaaaab').ltrim('a');

但是你可以跳过所有这些,直接做。
var str = require('validator').sanitize('aaaaaaaaab').ltrim('a')

据我所知,无论在内存/速度方面都没有不利影响。

就您的具体情况而言,您知道可以跳过一些步骤...

文件:MyBootStrap.js

Module.exports = MyBootstrap

文件:index.js(或其他)

require('library/Bootstrap.js')()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接