为工作线程在 Node 中修补或修改 "require()"
Patch or modify "require()" in Node for worker threads
我有一个可能很奇怪的用例,用于修补或修改 Node 的 require()
函数。我有以下内容,非常适合单线程(或非工作者)应用程序:
const Module = require('module');
const originalRequire = Module.prototype.require;
Module.prototype.require = function () {
// do stuff
return originalRequire.apply(this, arguments);
};
但是,我需要“调整”(不在我的控制范围内)的第三方代码利用了也使用 require()
.
的工作线程
有没有一种方法可以修改全局 require()
函数,该函数在工作线程中使用时也会生效?
我需要做的就是修改以这种方式导入的某些文件的路径,这很容易通过 Array.prototype.replace
.
完成
我已经在这个问题上摸索了一段时间,所以任何帮助将不胜感激!
非常感谢
虽然这不是最干净的解决方案(但话说回来,覆盖 require
也不是),您可以覆盖 require('worker_threads').Worker
:
const wt = require('worker_threads');
const _Worker = wt.Worker;
wt.Worker = function(...args) {
console.log('Creating a worker!');
return new _Worker(...args);
}
您可以使用构造函数的 options to add ['-r', '/some/module/path']
(won't work for ES6 modules) 到 execArgv
,导致 Worker 线程立即需要一个模块,或者替换 Worker 的“入口点”线程指向您自己的 code/script,进行更改,然后启动原始入口点。
我有一个可能很奇怪的用例,用于修补或修改 Node 的 require()
函数。我有以下内容,非常适合单线程(或非工作者)应用程序:
const Module = require('module');
const originalRequire = Module.prototype.require;
Module.prototype.require = function () {
// do stuff
return originalRequire.apply(this, arguments);
};
但是,我需要“调整”(不在我的控制范围内)的第三方代码利用了也使用 require()
.
有没有一种方法可以修改全局 require()
函数,该函数在工作线程中使用时也会生效?
我需要做的就是修改以这种方式导入的某些文件的路径,这很容易通过 Array.prototype.replace
.
我已经在这个问题上摸索了一段时间,所以任何帮助将不胜感激!
非常感谢
虽然这不是最干净的解决方案(但话说回来,覆盖 require
也不是),您可以覆盖 require('worker_threads').Worker
:
const wt = require('worker_threads');
const _Worker = wt.Worker;
wt.Worker = function(...args) {
console.log('Creating a worker!');
return new _Worker(...args);
}
您可以使用构造函数的 options to add ['-r', '/some/module/path']
(won't work for ES6 modules) 到 execArgv
,导致 Worker 线程立即需要一个模块,或者替换 Worker 的“入口点”线程指向您自己的 code/script,进行更改,然后启动原始入口点。