【问题标题】:Making modules global for use in other files in node.js使模块全局化以在 node.js 中的其他文件中使用
【发布时间】:2013-02-11 14:04:32
【问题描述】:

我读到了另一个我现在找不到的问题,将 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 中再次需要 async 模块,还是只是将 async 设为全局以便我可以在新文件中使用它而不需要它?

【问题讨论】:

    标签: node.js


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-14
          • 1970-01-01
          相关资源
          最近更新 更多