Vue项目使用 WebWorker

762 阅读1分钟

1.安装 worker-loader

yarn add worker-loader -D
npm install worker-loader -D

2.配置 vue.config.js

// webpack相关配置
  chainWebpack: (config) => {
    config.plugin("html").tap(args => {
      args[0].title = "HTML标题";
      return args;
    });
    // set worker-loader
    config.module.rule("worker").test(/\.worker\.js$/).use("worker-loader").loader("worker-loader").end();
    // 解决:worker 热更新问题
    config.module.rule('js').exclude.add(/\.worker\.js$/);
    // 解决:“window is undefined”报错,这个是因为worker线程中不存在window对象,因此不能直接使用,要用this代替
    config.output.globalObject('this');
  },

3.demo.worker.js

console.log(self)

addEventListener('message', function (e) {
  console.log(e, "message")

  const { data } = e;
  switch (data.route) {
    case "end":
      self.close();
      break;
    default:
      console.log("default");
  }

}, false);

4.使用

<script setup name="Home">
import demoWorker from "@/worker/demo.worker";

const worker = new demoWorker();
worker.postMessage({ name: "demo", age: 18 });
</script>