使模块全局化以用于node.js中的其他文件

时间:2013-02-26 07:34:25

标签: node.js

我在另一个问题中读到,我现在无法找到在node.js中创建模块全局的一个坏主意,然后由于node.js的更改而改变了他的答案

github上express.js的示例现在显示了一个示例。 https://github.com/visionmedia/express/tree/master/examples

那么如果我需要在多个文件中使用相同的模块,例如sequelize或async?

app.js:

var document = require('./routes/document')
async = require('async');

/routes/document.js:

async.series([...]);

app.js:

var document = require('./routes/document')
var async = require('async');

/routes/document.js:

var async = require('async');
async.series([...]);

我是否需要在document.js中再次使用异步模块,或者只是将异步全局变为全局,以便我可以在新文件中使用它而不需要它?

3 个答案:

答案 0 :(得分:2)

不要使用全局变量来访问模块。始终使用require并且只需要().js文件中所需的模块。要求只会加载您的模块一次并保留对它的引用。

只需要你需要的东西,即使它是几个模块,也是好的,因为它清楚地说明代码的依赖性,并可能帮助你以后重构你的代码。

只需要()你需要的东西也可以帮助你想要用另一个模块替换一个模块。例如,您可能希望将knox(S3)替换为新的aws-sdk模块。当您删除knox npm模块时,require会立即炸毁使用/ require knox的文件。如果它是全局变量,则需要查找对该全局引用的所有引用,并依赖于IDE或文本编辑器来查找它。

答案 1 :(得分:1)

简而言之,将其包含在每个文件中。该文件在第一次需要之后被缓存,因此内容实际上只运行一次(您可以通过在需求中放置一个日志语句来测试它;它只会显示一次)。

我所做的是制作一个需要我需要的所有其他文件的文件,并将它们全部导出。然后你只需要一个文件。当你有许多模块时,这可以非常方便。

答案 2 :(得分:0)

多次要求模块没有任何问题。内部require仅执行一次所需的文件,然后缓存结果。有关详细信息,请参阅Node.js Modules documentation