我正在使用https://react-pdf.org/上的react-pdf包创建一个PDF生成器。将react-pdf组件转换为pdf的过程会阻塞主线程,因此我想将其转换为单独的Worker线程。
我正在使用带有worker-loader的create-react-app来识别WebWorker文件。我很难想出一种将React组件导入Webworker并使用react-pdf提供的pdf(Component).toBlob()方法将其转换的方法。 pdf(Component).toBlob()将React组件作为输入并输出blob文件,这意味着工作人员必须以某种方式能够加载React组件。不包含React组件时,WebWorker会按预期工作。
我天真地尝试将React组件导入WebWorker,并尝试运行转换方法:
pdf(<Component />).toBlob().then(blob=>{
...
})
这会导致模块解析错误:
Uncaught Error: Module parse failed: Unexpected token (14:8)
File was processed with these loaders:
* ./node_modules/eslint-loader/index.js
You may need an additional loader to handle the result of these loaders.
我对Webpack的经验不是很丰富,所以我不知道如何解决此问题。任何帮助将不胜感激。
编辑:
我正在使用create-react-app默认的webpack配置,并添加了worker-loader,它可以检测.worker.js
文件并将其注册为Webworker。我使用react-app-rewired软件包添加了工作加载器:
module.exports = function override(config,env) {
config.module.rules.push({
test: /\.worker\.js$/,use: { loader: 'worker-loader' }
})
config.output['globalObject'] = 'this';
return config;
}