节点JS需要没有var

时间:2012-07-16 14:59:47

标签: javascript node.js requirejs

{这与Twitter无关}

一个有趣的问题,有趣的是,它可能是愚蠢的,你可以笑,但我至少会得到这个该死的痒的答案。

目前我使用

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

如果我能在Bootstrap index.js中做这样的事情,真正伟大的事情

module.exports.Bootstrap = My_Bootstrap;

并且像这样打电话给它

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

无需向我的空间声明另一个变量,有没有办法做到这一点,或者我是在盯着屏幕想知道,做梦,迷路,回来浪费时间?

修改 所以这就是我最后所做的:

我创建了一个单一的全局对象,并且只添加了重要的模块,因此可以访问和实例化它们。这结果是一个惊人的答案和解决方案,非常方便

3 个答案:

答案 0 :(得分:6)

您可以修改global对象。这类似于浏览器上的窗口对象。因此,您可以为您的模块编写一个包装器,如下所示:

global.Bootstrap = My_Bootstrap

全局对象在模块之间共享。然后,无论身在何处,都可以使用Bootstrap

答案 1 :(得分:2)

不,你必须声明变量。但是,您可以进入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();

答案 2 :(得分: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')()