我想你可能想用proxyquire來管理所需模塊的依賴關係。您可以將proxyquire設置爲全局覆蓋子模塊加載時的方法。
main.js
var proxyquire = require('proxyquire');
// use default childModule properties and methods unless they are redefined here
var childModuleStub = {
/* redefine here some necessary methods */
'@global': true
};
// parent module itself does't require childModule
var parentModuleStubs = {
'./childModule': childModuleStub
};
var parentModule = proxyquire('./parentModule', parentModuleStubs);
var result;
result = parentModule.exec();
console.log(result);
childModuleStub.data.sentence = "Overridden property.";
result = parentModule.exec();
console.log(result);
childModuleStub._exec = function() {
return "Overridden function.";
};
result = parentModule.exec();
console.log(result);
parentModule.js
var intermediateLibrary = require('./intermediateLibrary');
module.exports = {
exec: function() {
return intermediateLibrary.exec();
}
};
intermediateLibrary.js
var childModule = require('./childModule');
module.exports = {
exec: function() {
return childModule._exec();
}
};
childModule.js
var lib = {};
lib.data = {};
lib.data.sentence = "Hello, World!";
lib._exec = function() {
return lib.data.sentence;
};
module.exports = lib;
結果:
Hello, World!
Overridden property.
Overridden function.
有點重複在這裏,但它可能不是你尋找的答案。我沒有意識到按照您所說的方式加載模塊的可靠方法。 http://stackoverflow.com/questions/9736514/require-dependency-of-another-dependency-in-node-modules – tier1
據我所知,模塊只能存在兩個位置:在'node_modules/jade/node_modules'或者'node_modules /'中。爲什麼不嘗試兩種? – robertklep
@robertklep - 如果我的模塊實際上是其他東西的依賴項呢?那麼從技術上來說,我想要加載的dep可能存在於'../../../ node_modules /'之類的地方。 – callum