我想导入依赖项的依赖项。例如,我想将jade-load
直接导入我的应用:
my-app
┗━jade
┗━jade-load
我可以require('jade/node_modules/jade-load')
,但如果node_modules树已被展平或重复使用,则无法正常工作。
我想过使用require.resolve()
找出jade-load
到底在哪里,但似乎没有办法告诉它起点决议。我需要能够说"要求玉石来自任何地方的玉石和#34;。
NB。我不想安装jade-load作为我的应用程序的直接依赖;重点是导入jade使用的同一个实例,所以我可以对其进行monkeypatch。
答案 0 :(得分:0)
我想您可能希望使用proxyquire来管理所需模块的依赖关系。您可以将proxyquire设置为在子模块加载时全局覆盖子模块的方法。
main.js
set(h1,'Color','g','DisplayName','1');
set(h2,'Color','b','DisplayName','2e');
plot(ax(1),x3,y3,'Color','r','DisplayName','3');
plot(ax(2),x4,y4,'Color','k','DisplayName','4');
parentModule.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);
intermediateLibrary.js
var intermediateLibrary = require('./intermediateLibrary');
module.exports = {
exec: function() {
return intermediateLibrary.exec();
}
};
childModule.js
var childModule = require('./childModule');
module.exports = {
exec: function() {
return childModule._exec();
}
};
结果:
var lib = {};
lib.data = {};
lib.data.sentence = "Hello, World!";
lib._exec = function () {
return lib.data.sentence;
};
module.exports = lib;