如何确保在NodeJS中加载模块

时间:2015-11-26 18:36:34

标签: javascript node.js

这是我遇到的不止一个问题。这是一个示例文件结构:

app.js
folder
-- index.js
-- module1.js
-- module2.js

从我的应用程序的入口点app.js开始,我需要folder/index.js。该文件本身只是一个需要目录中所有其他文件的加载器。 module1.jsmodule2.js都定义了我想要最终使用的一些方法。它们永远不会被app.js直接要求,因为index.js会处理它并添加常见的帮助程序实用程序并对这些模块应用一些转换。

如果我在需要之后使用app.js中的那些文件中定义的某些方法,那么一切正常。但问题出现在module2.js中定义的方法想要使用method1.js中定义的方法(反之亦然)。有时它会起作用,有时候不行(在有多个文件的文件夹中,我确实无法找到它的确切工作时间和尚未确定的时间)。

如果,module2.js我需要./index.js,然后使用module1.js定义的方法,我有时会获得Cannot read property 'myMethod' of undefined。我假设它与index.js所需的模块的顺序有关,但我似乎找不到解决这个常见问题的方法(除了复制代码或不使用这些其他模块的方法)。 / p>

这个问题有一个共同的解决方案吗?我尝试过这样的事情:

var modules = require(./index.js);

exports.myMethod = function() {
  if(!modules.module1 || !modules.module1.myOtherMethod) {
    modules = require('./index.js');
  }
  modules.module1.myOtherMethod();
};

但它没有做任何事情,modules.module1仍未定义。

2 个答案:

答案 0 :(得分:1)

听起来modulerequire module2。这是module1需要调用module2中的方法的解决方案。

如果您担心拨打require的电话很多,请不要。这是我使用的每种编程语言的标准实践(特别是在任何Java程序中查看import语句。我知道Java很冗长,但这是正确的做法。)

在一个模块中查看代码并且不知道来自哪里,因为缺少require语句,这绝对是不好的做法。

答案 1 :(得分:0)

您有循环依赖问题。尝试将一些常用功能移动到第三个文件,让module1module2需要它,或者确保其中一个仅以一种方式需要另一个。

永远不要求需要当前文件的文件。