我有两个使用相同目录的节点项目:
projectA/
|- app.js
|- projectB/
|- app.js
|- node_modules/
|- moduleX : version 1
|- commonDir/
|- commonModule.js
|- node_modules/
|- moduleX : version 2commonModule.js
require("moduleX")projectA和projectB都做require(commonModule)。我预计当我运行projectA ( "node“表单'projectA/')时,版本2将被加载,而当我运行projectB("node”表单'prjoctB/')时,版本1将被加载。不幸的是,在这两种情况下,它似乎运行版本2。
我在这里做错什么了吗?
编辑:我现在了解到,节点根据当前模块搜索模块,该模块执行“()”,这是有意义的。
那么,如何选择加载,运行哪个模块版本?
发布于 2014-03-09 21:56:10
我没有在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,但是您似乎已经完成了这个部分。
https://stackoverflow.com/questions/22287789
复制相似问题