我有两个使用相同目录的节点项目:
projectA/
|- app.js
|- projectB/
|- app.js
|- node_modules/
|- moduleX : version 1
|- commonDir/
|- commonModule.js
|- node_modules/
|- moduleX : version 2
commonModule.js
:
require("moduleX")
projectA
和projectB
都require(commonModule)
。我期望当我运行projectA
(“node app”形式'projectA /')时,将加载版本2,当我运行projectB
(“node app”形式'prjoctB /')版本时1将被加载。不幸的是,在这两种情况下它似乎都运行了第2版。
我在这里做错了吗?
修改 我现在明白,节点根据当前模块搜索模块,该模块执行'require()',这是有意义的。
那么,如何选择加载,运行哪个模块版本?
答案 0 :(得分:2)
我没有在commonModule
中对模块名称进行硬编码,而是设置它以便我可以给它一个模块对象。例如commonModule
可以包含:
module.exports = function(other_module) {
return {
foo: function () {
return other_module.something("blah");
}
};
}
然后每个项目都会将自己的模块传递给commonModule
:
var commonModule = require("commonModule")(require("./moduleX"));
commonModule.foo();
./moduleX
将根据每个项目解决,所以没有问题。您的项目必须能够找到commonModule
,但您似乎已经覆盖了这部分。