Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 导入模块时Web Worker不工作,即使在使用Worker loader时也是如此_Javascript_Reactjs_Webpack_Web Worker_Worker Loader - Fatal编程技术网

Javascript 导入模块时Web Worker不工作,即使在使用Worker loader时也是如此

Javascript 导入模块时Web Worker不工作,即使在使用Worker loader时也是如此,javascript,reactjs,webpack,web-worker,worker-loader,Javascript,Reactjs,Webpack,Web Worker,Worker Loader,我正在尝试创建一个web worker来防止主线程暂停。工人应该阅读图像并做各种事情 该应用程序是使用create react app创建的 目前我有 webpack.config.js module.exports = { module: { rules: [ { test: /\.worker\.js$/, use: { loader: 'worker-loader' }

我正在尝试创建一个web worker来防止主线程暂停。工人应该阅读图像并做各种事情

该应用程序是使用
create react app
创建的

目前我有

webpack.config.js

module.exports = {
    module: {
        rules: [
            {
                test: /\.worker\.js$/,
                use: { loader: 'worker-loader' }
            }
        ]
    }
};
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'});
    }
}
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);
    })
};
WebWorker.js

module.exports = {
    module: {
        rules: [
            {
                test: /\.worker\.js$/,
                use: { loader: 'worker-loader' }
            }
        ]
    }
};
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'});
    }
}
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);
    })
};
readimage.worker.js

module.exports = {
    module: {
        rules: [
            {
                test: /\.worker\.js$/,
                use: { loader: 'worker-loader' }
            }
        ]
    }
};
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'});
    }
}
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');
    };
}
但是当我运行它时,我得到了错误

未捕获引用错误:未定义jimp\uu网页包\u导入的模块\u 0\uu


如何将模块正确导入web worker

workers中的导入还没有得到广泛支持-现在看起来像Chrome、Edge和node。你试过进口货吗@JamesSouth我研究了使用importScripts,但除此之外,它还提供了一个linting错误(我可以将其设置为忽略),我应该从何处导入模块?我不能使用node_modules文件夹中的相对路径,也不能仅使用
jimp
。使用importScripts的唯一方法是将模块复制到
公共文件夹中,然后使用绝对url(例如
http://localhost:3000/jimp.js
)。有更好的方法吗?也许工人插件代替工人加载器会有帮助??