为工作线程在 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,进行更改,然后启动原始入口点。