qiankun下webpack使用webworker问题记录

/post/wp-worker article cover image

参考资料

报错

在qiankun微前端webpack配置下使用webworker时报错:

shell
Error in mounted hook: "SecurityError: Failed to construct 'Worker': Script at 'http://localhost:xxx/xxx.worker.worker.js'" cannot be accessed from origin 'htttp://localhost:xx'

解决办法

原因是作为子应用的程序中使用web worker时产生了跨域导致,使用worker-loader(webpack4.x)配置时必须设置为inline,webpack5.x参考 官方文档 以vue-cli项目为例:

js
module.exports  = {
	// ...
  chainWebpack: config => {
		// ...
    config.module
      .rule('worker')
      .test(/\.worker\.js$/i)
      .use('worker-loader')
        .loader('worker-loader')
        .options({
          inline: 'fallback'
        })
        .end();
		// ...
  }
}

worker文件中importScript语法改为正常模块导入,否则需要手动作为一个entry做资源打包处理

js
//const origin = location.origin + 'xxx';
//self.importScripts(origin + '/xxx/xxx.js');

import xxx from "/xxx.js";

onmessage = (e) => {
	// ...
}

业务逻辑直接导入实例化即可:

js
import myWorker from "./runner.worker.js";

const worker = new myWorker();

worker.onmessage = e => {
	// ...
}

worker.onmessageerror = err => {
	// ...
}