node.js - Hur man använder WebWorker med ts-node? (utan webpack)


Finns det något sätt att använda ts-node med WebWorkers men utan att använda webpack?

När jag gör:

const worker = new Worker('path-to/workerFile.ts', { // ... });

Jag får:

TypeError [ERR_WORKER_UNSUPPORTED_EXTENSION]: Worker-skriptets filändelse måste vara ".js" eller ".mjs". Mottog ".ts" vid new Worker (internal/worker.js:272:15)/....

Några idéer?

Tomer

Svar #1

Du kan skapa en funktion för att göra magin, genom att använda eval-egenskapen på WorkerOption-parametern.

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
    );
}

så att du kan skapa tråden så här:

let wk = workerTs('./file.ts', {});

Hoppas det kan hjälpa.

Relaterade artiklar