vue 优化 —— webpack配置splitChunks

总得来说

在 Vue 项目中,使用 splitChunks 是优化打包性能的重要手段。splitChunks 是 Webpack 提供的一个功能,用于将代码拆分成多个文件(chunks),从而减少初始加载时间,提升应用性能

Vue CLI 基于 Webpack,因此可以通过配置 vue.config.js 来使用 splitChunks

默认就配了

默认的 splitChunks 行为

Vue CLI 默认已经配置了 splitChunks,主要规则如下:

  • node_modules 中的第三方库打包到单独的 chunk 中(通常命名为 vendor)。
  • 将异步加载的模块打包到单独的 chunk 中(例如通过 import() 动态导入的模块)。

自己改一些配置

自定义 splitChunks 配置

如果需要更细粒度的控制,可以在 vue.config.js 中修改 configureWebpackchainWebpack 选项。

示例:vue.config.js

js 复制代码
module.exports = {
  configureWebpack: {
    optimization: {
      splitChunks: {
        chunks: 'all', // 对所有类型的 chunks 进行拆分(包括同步和异步)
        minSize: 20000, // 文件大小超过 20KB 才拆分
        maxSize: 0, // 不限制最大文件大小
        minChunks: 1, // 至少被引用一次才拆分
        maxAsyncRequests: 30, // 每个异步加载模块最多拆分成 30 个 chunks
        maxInitialRequests: 30, // 初始加载时最多拆分成 30 个 chunks
        automaticNameDelimiter: '~', // 文件名分隔符
        cacheGroups: {
          vendors: {
            test: /[\\/]node_modules[\\/]/, // 匹配 node_modules 中的模块
            priority: -10, // 优先级
            name: 'vendors', // 打包后的文件名
          },
          default: {
            minChunks: 2, // 至少被引用两次才拆分
            priority: -20, // 优先级
            reuseExistingChunk: true, // 重用已存在的 chunk
          },
        },
      },
    },
  },
};

配置详解

chunks

  • async:只拆分异步加载的模块(默认)。
  • initial: 只拆分同步加载的模块。
  • all:拆分所有模块(同步和异步)。

minSize

  • 文件大小超过指定值(单位:字节)才会被拆分。

maxSize

  • 文件大小超过指定值(单位:字节)时,尝试进一步拆分。

minChunks

  • 模块被引用次数超过指定值才会被拆分。

cacheGroups

  • 定义如何分组打包模块。

    • test:匹配模块路径的正则表达式。
    • priority:优先级,数值越大优先级越高。
    • name:打包后的文件名。
    • reuseExistingChunk:是否重用已存在的 chunk。

常见场景

第一种:把node_modules单独打包

js 复制代码
cacheGroups: {
  vendors: {
    test: /[\\/]node_modules[\\/]/,
    priority: -10,
    name: 'vendors',
  },
}

第二种:把common公共代码单独打包

js 复制代码
cacheGroups: {
  common: {
    minChunks: 2, // 至少被引用两次
    priority: -20,
    name: 'common',
    reuseExistingChunk: true,
  },
}

第三种:按需加载的路由组件

Vue Router 的动态导入(import())会自动生成单独的 chunk,无需额外配置。

运行 npm run build 后,可以在 dist/js 目录下看到生成的 chunk 文件。例如:

  • app.[hash].js:主应用代码。
  • vendors.[hash].js:第三方库代码。
  • common.[hash].js:公共代码。

注意事项

  • 不要过度拆分,否则可能会导致 HTTP 请求过多,反而影响性能。
  • 使用 maxSize 时,Webpack 会尝试将大文件拆分成更小的文件,但可能会增加额外的请求。
相关推荐
QQ27402875618 分钟前
Soundness Gitpod 部署教程
linux·运维·服务器·前端·chrome·web3
前端小崔27 分钟前
从零开始学习three.js(18):一文详解three.js中的着色器Shader
前端·javascript·学习·3d·webgl·数据可视化·着色器
哎呦你好37 分钟前
HTML 表格与div深度解析区别及常见误区
前端·html
运维@小兵39 分钟前
vue配置子路由,实现点击左侧菜单,内容区域显示不同的内容
前端·javascript·vue.js
koiy.cc1 小时前
记录:echarts实现tooltip的某个数据常显和恢复
前端·echarts
一只专注api接口开发的技术猿2 小时前
企业级电商数据对接:1688 商品详情 API 接口开发与优化实践
大数据·前端·爬虫
GISer_Jing2 小时前
[前端高频]数组转树、数组扁平化、深拷贝、JSON.stringify&JSON.parse等手撕
前端·javascript·json
Yvonne爱编码2 小时前
CSS- 4.1 浮动(Float)
前端·css·html·github·html5·hbuilder
timeguys3 小时前
【前端】[vue3] [uni-app]使用 vantUI 框架
前端·uni-app
岁岁岁平安3 小时前
Vue3学习(组合式API——Watch侦听器、watchEffect()详解)
前端·javascript·vue.js·学习·watch侦听器·组合式api