如何在 ts-node 中使用 WebWorker? (没有网络包)
How to use WebWorker with ts-node? (without webpack)
有没有办法在不使用 webpack 的情况下将 ts-node 与 WebWorkers 但是一起使用?
当我这样做时:
const worker = new Worker('path-to/workerFile.ts', { // ... });
我得到:
TypeError [ERR_WORKER_UNSUPPORTED_EXTENSION]:
The worker script extension must be ".js" or ".mjs". Received ".ts" at new Worker (internal/worker.js:272:15)
// ....
有什么想法吗?
汤姆
您可以使用 WorkerOption 参数的 eval 属性 创建一个函数来创造奇迹。
const workerTs = (file: string, wkOpts: WorkerOptions) => {
wkOpts.eval = true;
if (!wkOpts.workerData) {
wkOpts.workerData = {};
}
wkOpts.workerData.__filename = file;
return new Worker(`
const wk = require('worker_threads');
require('ts-node').register();
let file = wk.workerData.__filename;
delete wk.workerData.__filename;
require(file);
`,
wkOpts
);
}
所以你可以这样创建线程:
let wk = workerTs('./file.ts', {});
希望对您有所帮助。
有没有办法在不使用 webpack 的情况下将 ts-node 与 WebWorkers 但是一起使用?
当我这样做时:
const worker = new Worker('path-to/workerFile.ts', { // ... });
我得到:
TypeError [ERR_WORKER_UNSUPPORTED_EXTENSION]:
The worker script extension must be ".js" or ".mjs". Received ".ts" at new Worker (internal/worker.js:272:15)
// ....
有什么想法吗?
汤姆
您可以使用 WorkerOption 参数的 eval 属性 创建一个函数来创造奇迹。
const workerTs = (file: string, wkOpts: WorkerOptions) => {
wkOpts.eval = true;
if (!wkOpts.workerData) {
wkOpts.workerData = {};
}
wkOpts.workerData.__filename = file;
return new Worker(`
const wk = require('worker_threads');
require('ts-node').register();
let file = wk.workerData.__filename;
delete wk.workerData.__filename;
require(file);
`,
wkOpts
);
}
所以你可以这样创建线程:
let wk = workerTs('./file.ts', {});
希望对您有所帮助。