0

我的项目结构的根目录中有一个模块(server.js)。它在名为 lib 的目录中包含一个模块:

var mongo = require('./lib/MongoUtils');

lib目录中的另一个模块也需要'MongoUtils'模块,所以它:

var mongo = require('./MongoUtils');

问题是我最终得到了该对象的两个副本(这很糟糕,因为它有一些系统资源,如数据库连接等)。

我已经阅读了 Node.js 缓存警告文档(http://nodejs.org/api/modules.html#modules_module_caching_caveats),所以问题似乎是我指的是具有两个不同路径的同一个模块,因此Node.js 给了我两个副本。这种理解正确吗?

我该如何解决这个问题?我不想只是将我的模块转储到 node_modules 中,因为这是由 npm 通过我的 package.json(和 .gitignore-d)管理的。我考虑将我的本地模块放在 package.json 中(假设这是可能的),但是每当我进行更改时,我都需要运行“npm install”。

如果这不能干净地完成,我会简单地将模块加载到一个地方并传递它,但是如果我的很多模块都发生这种情况,这听起来不具有可扩展性。

4

1 回答 1

1

我解决了。原来我打错了我的一个模块的大小写。Node.js 愉快地加载了模块并且工作正常,唯一的副作用是我加载了两次模块。

这是一个例子。请注意 lib1.js 中 require 语句中的大写 B。

主.js:

var lib1 = require('./lib/lib1')
    , lib2 = require('./lib/lib2');

库/lib1.js:

var lib2 = require('./liB2');

库/lib2.js:

function MyClass() {
    console.log('Constructor called');
}

module.exports = new MyClass();

如果您运行“node main.js”,您将获得以下输出:

Constructor called
Constructor called

如果你修复 lib1.js 中的大写 B 并再次运行它,你会看到:

Constructor called
于 2013-09-30T16:49:19.577 回答