出于测试目的,我需要更改 Node.js Module
包装器。
(function (exports, require, module, __filename, __dirname, process, global) {
debugger;
});
玩弄了 Module
我发现了
var Module = require("module")
Module.wrapper
-> ["(function (exports, require, module, __filename, __dirname, process, global) { ", "
});"]
Module.wrap
-> function(script) {
return NativeModule.wrapper[0] + script + NativeModule.wrapper[1];
}
是否可以 Hook 到 Module.wraper
或属性来更改脚本包装?
最佳答案
找到 Module.wrap
函数,您做得很好。直接覆盖怎么样?
假设您有两个文件,main.js
和 module.js
。在 main.js
中,您覆盖 Module.wrap
函数以便在每次需要模块时 console.log('debug');
.然后你需要 module.js
,其中包含一个 hello world 消息。
main.js
:
var Module = require("module");
(function(moduleWrapCopy) {
Module.wrap = function(script) {
script = "console.log('debug');" + script
return moduleWrapCopy(script); // Call original wrapper function
};
}(Module.wrap)); // Pass original function to IIFE
require("./module.js");
module.js
:
console.log("Hello world from module.js!");
执行 node main.js
结果:
debug Hello world from module.js!
这也适用于嵌套的 require()
调用,例如,如果您在 module.js中的
:require("./module2.js")
module.js
:
console.log("Hello world from module.js!");
require("./module2.js");
module2.js
:
console.log("Hello world from module2.js!");
在这种情况下 node main.js
产生:
debug Hello world from module.js! debug Hello world from module2.js!
在 Node.js 4.3.0 和 6.1.0 上测试。
关于javascript - 如何更改 Node.js 模块包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35211056/