Web Worker не работает при импорте модуля, даже при использовании worker-loader - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь заставить веб-работника предотвратить срыв основного потока React. Работник должен читать изображения и делать разные вещи.

Приложение было создано с использованием create-react-app.

В настоящее время у меня есть

webpack.config.js

module.exports = {
    module: {
        rules: [
            {
                test: /\.worker\.js$/,
                use: { loader: 'worker-loader' }
            }
        ]
    }
};

WebWorker.js

export default class WebWorker {
    constructor(worker) {
        const code = worker.toString();
        const blob = new Blob(['('+code+')()'], {type: "text/javascript"});
        return new Worker(URL.createObjectURL(blob),  {type: 'module'});
    }
}

readimage.worker.js

import Jimp from "jimp";

export default () => {
    self.addEventListener('message', e => { // eslint-disable-line no-restricted-globals
        if (!e) return;
        console.log('Worker reading pixels for url', e.data);
        let data = {};

        Jimp.read(e.data).then(image => {
            // jimp does stuff
            console.log('Worker Finished processing image');
        })

        postMessage(data);
    })
};

А потом в моем компоненте React AppContent.js у меня есть

import WebWorker from "./workers/WebWorker";
import readImageWorker from './workers/readimage.worker.js';

export default function AppContent() {
    const readWorker = new ReadImageWorker(readImageWorker);
    readWorker.addEventListener('message', event => {
        console.log('returned data', event.data);
        setState(data);
    });

    // callback that is executed onClick from a button component
    const readImageContents = (url) => {
        readWorker.postMessage(url);
        console.log('finished reading pixels');
    };
}

Но когда я его запускаю, я получаю ошибку

Uncaught ReferenceError: jimp__WEBPACK_IMPORTED_MODULE_0__ не определено

Как правильно импортировать модуль в веб-работника?

...