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 会尝试将大文件拆分成更小的文件,但可能会增加额外的请求。
相关推荐
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
怕浪猫1 小时前
Electron 开发实战(一):从零入门核心基础与环境搭建
前端·electron·ai编程
小鹏linux2 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
前端若水3 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Bigger3 小时前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
涵涵(互关)3 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态3 小时前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态4 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart4 小时前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
放下华子我只抽RuiKe54 小时前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架