关于webWorker在vue2+vuecli5项目中的实践

434 阅读1分钟

背景

因为公司项目需求需要用到highlight.js,我刚好又在highlight.js的官网上看到可以在 Web Worker 中使用,所以我就心血来潮尝试如何在vuecli5项目中的实践。

构建worker方式

  • worker-loader
  • webpack5内置方式

技术选择

本来我是想worker-loader的,但是网上基本都说webpack5推出了新的构建worker的方式,刚好又因为vuecli5是基于webpack5的,所以我只能用webpack5内置方式。

  • worker.js
import hljs from "highlight.js/lib/core";
import json from "highlight.js/lib/languages/json";
hljs.registerLanguage("json", json);
onmessage = (event) => {
  const result = hljs.highlightAuto(event.data, ["json"]);
  postMessage(result.value);
};
  • 使用方式
this.worker = new Worker(
  /* webpackChunkName: "highlight.worker" */ new URL(
    "./worker.js",
    import.meta.url
  )
);
this.worker.onmessage = ({ data }) => {
  console.log(data);
};

依赖chunk文件地址错误

方法一,此时可考虑不对依赖进行提取,修改vue.config.js配置

config.optimization.splitChunks({
    minChunks: 999999 // 設置為極大值,禁止拆分
});

方法二,修改vue.config.js配置publicPath为auto

具体请这个根据你的项目来选择

参考文献

webpack5 umd打包,使用worker摸索记录 - 掘金 (juejin.cn)

Web Workers | webpack 中文文档 (docschina.org)

开始 | highlight.js中文网 (fenxianglu.cn)