Ion*_*zău 22 javascript require node.js
是否有可能覆盖全局 require
函数,从而影响它的process
级别?
据我所知,该require
函数在包装NodeJS脚本的函数中作为参数提供:
(function (..., require, __dirname) { // something like this
// The wrapped code
})(...);
Run Code Online (Sandbox Code Playgroud)
有没有办法修改require
功能?
(function () {
var _require = require;
require = function () {
console.log("...");
_require.apply(this, arguments);
};
})();
Run Code Online (Sandbox Code Playgroud)
这可能只会影响它所在的脚本.
我们如何在流程级别修改它?
oro*_*edd 59
var Module = require('module');
var originalRequire = Module.prototype.require;
Module.prototype.require = function(){
//do your thing here
return originalRequire.apply(this, arguments);
};
Run Code Online (Sandbox Code Playgroud)
小智 5
这是基于@orourkedd一个更安全的本地ES6答案,就像一个事件监听器都需要调用,它看起来像它的更换要求,但如果你仔细看它实际上是在说:require = require
和陷阱调用,但返回原来的行为。这仅仅是数以百万计的用途之一Proxy()
,其一直是我非常方便,例如,在打字稿映射tsconfig“路径”与真正的模块节点将解决。
我可以说这不是“猴子补丁”,因为它是该语言的较低级别。
var Module = require('module');
Module.prototype.require = new Proxy(Module.prototype.require,{
apply(target, thisArg, argumentsList){
let name = argumentsList[0];
/*do stuff to ANY module here*/
if(/MyModule/g.test(name)){
/*do stuff to MY module*/
name = "resolveAnotherName"
}
return Reflect.apply(target, thisArg, argumentsList)
}
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8798 次 |
最近记录: |