[英]How to load web worker using webpack's worker loader
我正在尝试使用webpack的worker loader将Web worker脚本加载到我的React应用程序中。 但是,我得到一个模块未找到错误。
./src/index.js中的错误找不到模块:错误:无法解析'C:\\ Users \\ wyrm \\ Documents \\ Project \\ src'中的'./file.worker'
这是我的src / index.js,它是webpack的入口点
import React from "react";
import ReactDOM from "react-dom";
import Worker from "./file.worker";
const worker = new Worker();
worker.postMessage({ message: "Hello there" });
const Index = () => <div>Hello there General Kenobi!</div>;
ReactDOM.render(<Index />, document.getElementById("index"));
我在Project / public文件夹中有一个名为file.worker.js的Web worker脚本
/* eslint-env worker */
onmessage = e => {
const message = e.data;
console.log(`[From Main]: ${message}`);
};
这是我的webpack配置文件:
const HtmlWebPackPlugin = require("html-webpack-plugin");
const htmlPlugin = new HtmlWebPackPlugin({
template: "./src/index.html",
filename: "./index.html"
});
module.exports = {
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: [{ loader: "babel-loader" }, { loader: "eslint-loader" }]
},
{
test: /\.worker\.js$/,
use: [{ loader: "worker-loader", options: { publicPath: "/public/" } }]
}
]
},
plugins: [htmlPlugin]
};
根据webpack 文档 ,我需要做的就是将以下内容添加到我的配置文件中,我已经完成了:
// webpack.config.js
{
module: {
rules: [
{
test: /\.worker\.js$/,
use: { loader: 'worker-loader' }
}
]
}
}
我去为记录指定公共路径的进一步的步骤在这里 :
// App.js
// This will cause the worker to be downloaded from `/workers/file.worker.js`
import Worker from './file.worker.js';
// webpack.config.js
{
loader: 'worker-loader'
options: { publicPath: '/workers/' }
}
但即使我已将publicPath指定为Project / public,抛出的错误似乎表明它正在Project / src文件夹中查找Web worker脚本。 在我看来,无论如何,webpack默认在Project / public文件夹中查找web worker脚本,所以右边为publicPath指定Project / public应该是多余的?
我还要提一下,我正在使用webpack dev服务器。 可能是因为我错过了我的webpack开发服务器的某种配置,而且它没有拿起我的web worker脚本?
我真的无法弄清楚为什么我的模块没有找到错误,因为我似乎已经正确地遵循了文档。
Project directory
Project
- dist
- index.html
- main.js
- public
- file.worker.js
- src
- index.html
- index.js
- .babelrc
- .eslintrc.json
- package.json
- webpack.config.js
尝试将file.worker.js移动到src中。 这就是你在import Worker from "./file.worker";
使用import Worker from "./file.worker";
查找它的地方import Worker from "./file.worker";
尝试以下内容:
import Worker from 'worker-loader!./file.worker.js';
您需要指定哪个加载器(即worker-loader )将明确加载worker。
另外,我认为你不需要配置publicPath选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.