使用 webpack 在 Vue PWA 中包含大型 js 依赖项

Posted

技术标签:

【中文标题】使用 webpack 在 Vue PWA 中包含大型 js 依赖项【英文标题】:Including large js dependency in Vue PWA with webpack 【发布时间】:2019-02-26 11:00:59 【问题描述】:

我正在开发一个使用 Vue CLI 构建的简单的文字游戏。我找到了一个用于创建字典对象的单词列表,因为我读到在对象中查找键比在数组中查找值更快。

const WordDictionary = 
  aa: true,
  aah: true,
  aahed: true,
  aahing: true,
  ...

我使用字典来检查一个单词是否有效。该文件最终约为 1.3mb。当我为生产构建或从开发服务器提供服务时,需要很长时间来处理。

我认为问题出在 Babel 上,因为我在构建过程最终完成时收到此消息。

[BABEL] Note: The code generator has deoptimised the styling of word-dictionary.js as it exceeds the max of 500KB.

如何配置 Vue CLI / webpack / babel 构建过程来排除这个大文件?有没有更好的方法将这样的大型字典包含到 PWA 中? (一旦我弄清楚那部分,肯定会使用服务工作者添加缓存)

【问题讨论】:

您是否尝试过忽略.babelrc 中具有ignore 属性的文件? 【参考方案1】:

@Adam 的评论为我指明了正确的方向。我使用了exclude option for babel。我将babel.config.js 编辑为如下所示:

module.exports = 
  presets: [
    '@vue/app',
  ],
  exclude: ['word-dictionary.js'],
;

但它只适用于开发服务器。为了让它在生产环境中工作,我花了一整夜阅读documentation on webpack config 和documentation on webpack-chain 并想出了一个解决方案。在vue.config.js 我添加了以下内容:

chainWebpack: (config) => 
  config.module.rules.get('js').exclude.add(/[\\/]src[\\/]assets[\\/]word-dictionary[\\.]js/);
  config.optimization.merge(
    splitChunks: 
      chunks: 'all',
      cacheGroups: 
        dictionary: 
          minChunks: 1,
          name: 'dictionary',
          test: /[\\/]src[\\/]assets[\\/]word-dictionary[\\.]js/,
        ,
      ,
    ,
  );
,

将字典排除在 babel 处理之外,并将其拆分为自己的块。使用 vue-cli-service inspect 命令(或运行 vue ui 并运行 inspect task)查看 Vue CLI 生成的 webpack 配置很有帮助

实际上我最终没有使用此解决方案,因为我决定在加载组件后以纯文本形式获取字典并使用 indexOf 来搜索单词。

【讨论】:

以上是关于使用 webpack 在 Vue PWA 中包含大型 js 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Vue PWA模板,使用SVG精灵

如何将 PWA 添加到不是使用 Vue CLI 创建的 Vue.js 3 应用程序?

vue 插件 pwa sw.js 未找到

webpack配置使用PWA

Webpack 在 bundle 中包含自己的依赖项

如何在 vuejs webpack cli 项目中包含 jquery?