我想你可能想用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