Nodejs根据目录结构需要不同的模块

时间:2014-03-09 20:33:40

标签: node.js directory-structure

我有两个使用相同目录的节点项目:

projectA/
 |- app.js 
 |- projectB/
     |- app.js  
     |- node_modules/ 
           |- moduleX : version 1
 |- commonDir/ 
   |- commonModule.js
 |- node_modules/ 
   |- moduleX : version 2

commonModule.js

    require("moduleX")

projectAprojectBrequire(commonModule)。我期望当我运行projectA(“node app”形式'projectA /')时,将加载版本2,当我运行projectB(“node app”形式'prjoctB /')版本时1将被加载。不幸的是,在这两种情况下它似乎都运行了第2版。

我在这里做错了吗?

修改 我现在明白,节点根据当前模块搜索模块,该模块执行'require()',这是有意义的。

那么,如何选择加载,运行哪个模块版本?

1 个答案:

答案 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,但您似乎已经覆盖了这部分。