我的项目结构的根目录中有一个模块(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'每当我做出改变时。
如果不能干净利落地完成这项工作,我只需将模块装入一个地方并将其传递出去,但如果我的模块出现这种情况,那么这听起来并不可扩展。< / p>
答案 0 :(得分:0)
我解决了。事实证明我错误地记录了我的一个模块的大写。 Node.js愉快地加载了模块并且工作正常,唯一的副作用是我将模块加载了两次。
这是一个例子。请注意lib1.js中require语句中的大写字母B.
main.js:
var lib1 = require('./lib/lib1')
, lib2 = require('./lib/lib2');
LIB / lib1.js:
var lib2 = require('./liB2');
LIB / lib2.js:
function MyClass() {
console.log('Constructor called');
}
module.exports = new MyClass();
如果您运行“node main.js”,您将获得以下输出:
Constructor called
Constructor called
如果您在lib1.js中修复大写B并再次运行它,您将看到:
Constructor called