我在另一个问题中读到,我现在无法找到在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中再次使用异步模块,或者只是将异步全局变为全局,以便我可以在新文件中使用它而不需要它?
答案 0 :(得分:2)
不要使用全局变量来访问模块。始终使用require并且只需要().js文件中所需的模块。要求只会加载您的模块一次并保留对它的引用。
只需要你需要的东西,即使它是几个模块,也是好的,因为它清楚地说明代码的依赖性,并可能帮助你以后重构你的代码。
只需要()你需要的东西也可以帮助你想要用另一个模块替换一个模块。例如,您可能希望将knox(S3)替换为新的aws-sdk模块。当您删除knox npm模块时,require会立即炸毁使用/ require knox的文件。如果它是全局变量,则需要查找对该全局引用的所有引用,并依赖于IDE或文本编辑器来查找它。
答案 1 :(得分:1)
简而言之,将其包含在每个文件中。该文件在第一次需要之后被缓存,因此内容实际上只运行一次(您可以通过在需求中放置一个日志语句来测试它;它只会显示一次)。
我所做的是制作一个需要我需要的所有其他文件的文件,并将它们全部导出。然后你只需要一个文件。当你有许多模块时,这可以非常方便。
答案 2 :(得分:0)
多次要求模块没有任何问题。内部require
仅执行一次所需的文件,然后缓存结果。有关详细信息,请参阅Node.js Modules documentation。