0

我读到了另一个我现在找不到的问题,将 node.js 中的模块设为全局是一个坏主意,然后他因为 node.js 的变化而改变了答案

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

那么如果我在多个文件中需要相同的模块,比如 sequelize 或 async 怎么办?

应用程序.js:

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

/routes/document.js:

async.series([...]);

或者

应用程序.js:

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

/routes/document.js:

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

我应该在 document.js 中再次需要 async 模块,还是只是将 async 设为全局以便我可以在新文件中使用它而不需要它?

4

3 回答 3

2

不要使用全局变量来访问模块。始终使用 require 并且只 require() 该 .js 文件中需要的模块。Require 只会加载你的模块一次并持有对它的引用。

只需要你需要的东西,即使它是几个模块,也是好的,因为它清楚地说明了你的代码的依赖关系是什么,并且可能有助于你以后重组你的代码。

在需要用另一个模块替换一个模块时,仅 requires() 也可以提供帮助。例如,您可能希望将 knox(S3) 替换为新的 aws-sdk 模块。当您删除 knox npm 模块时,require 将立即在使用/require knox 的文件中爆炸。如果它是一个全局变量,您将需要找到对该全局引用的所有引用,并依靠您的 IDE 或文本编辑器来找到它。

于 2013-02-26T08:34:52.853 回答
1

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

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

于 2013-02-26T07:50:37.593 回答
0

多次要求一个模块并没有错。内部require只执行一次所需的文件,然后缓存结果。有关更多信息,请参阅Node.js 模块文档

于 2013-02-26T07:54:44.230 回答