如何在 ts-node 中使用 WebWorker?(没有 webpack)

kut*_*mer 6 web-worker node.js typescript ts-node

有没有办法使用TS-节点与WebWorkers没有使用的WebPack?

当我做:

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) // ....

有任何想法吗?

托默

Dan*_*ela 9

您可以使用 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
    );
}
Run Code Online (Sandbox Code Playgroud)

所以你可以像这样创建线程:

let wk = workerTs('./file.ts', {});
Run Code Online (Sandbox Code Playgroud)

希望它能有所帮助。