vite的分包

在 Vite 项目中,打包时的分包策略主要通过配置  build.rollupOptions.output  来控制,核心包括以下几个维度:

 

一、默认分包规则

 

Vite 基于 Rollup 打包,默认分包逻辑如下:

 

1. 依赖与业务代码分离

- 第三方依赖(如  node_modules  中的库)会被自动拆分为独立 chunk(如  vendor.js ),避免与业务代码混合。

- 原因:依赖更新频率低,单独打包可利用浏览器缓存。

2. 路由或组件懒加载分包

- 对  import('./module.js')  动态导入的模块,会自动生成独立 chunk(如  module.[hash].js )。

 

二、手动配置分包维度

 

通过  vite.config.js  中的  build.rollupOptions.output  可自定义分包策略,常用配置如下:

 

1. 按文件类型或路径分包

 

// vite.config.js

export default {

  build: {

    rollupOptions: {

      output: {

        // 按文件夹分组(如将 utils 目录下的文件打包到 utils 文件夹)

        manualChunks(id) {

          if (id.includes('node_modules')) {

            // 第三方依赖按包名分包(如 react、vue 单独打包)

            return id.toString().split('node_modules/')[1].split('/')[0].toString();

          }

          if (id.includes('/utils/')) {

            return 'utils';

          }

          if (id.includes('/components/')) {

            return 'components';

          }

          // 其他业务代码按默认规则处理

        }

      }

    }

  }

}

 

 

2. 控制 chunk 大小阈值

 

-  chunkFileNames :定义 chunk 文件名格式,可结合哈希值区分版本。

-  manualChunks  配合  maxFileSize (Vite 2.7+ 支持):

export default {

  build: {

    rollupOptions: {

      output: {

        // 单个 chunk 超过 500KB 时自动拆分

        chunkFileNames: 'assets/chunks/[name]-[hash].js',

        manualChunks: {

          // 示例:将 lodash 单独打包

          lodash: ['lodash']

        },

        // Vite 4 中使用 `chunkSizeWarningLimit` 控制警告阈值

        chunkSizeWarningLimit: 500

      }

    }

  }

}

 

 

3. 缓存分组(长期缓存优化)

 

- 将更新频率低的代码(如框架、工具库)与高频更新的业务代码分离:

manualChunks: {

  // 第三方库单独分组

  vendor: ['react', 'react-dom'],

  // 工具函数分组

  utils: ['@/utils/request', '@/utils/format'],

  // 业务页面按模块分组(如 dashboard 页面相关代码)

  dashboard: ['@/pages/dashboard/index']

}

 

 

三、分包效果验证

 

打包后可通过以下方式查看分包结果:

 

1. 在  dist  目录中查看生成的 JS 文件,按命名规则判断分组是否符合预期。

2. 使用  rollup-plugin-analyzer  或  vite-plugin-bundle-analyzer  分析包体积分布:

# 安装分析插件

npm install -D rollup-plugin-analyzer

 

 

// vite.config.js

import { defineConfig } from 'vite'

import analyzer from 'rollup-plugin-analyzer'

 

export default {

  build: {

    rollupOptions: {

      plugins: [analyzer()] // 打包后生成分析报告

    }

  }

}

 

 

四、最佳实践

 

- 按需分包:优先拆分高频访问或体积大的模块,避免过度拆分导致请求数过多。

- 结合路由懒加载:对单页应用的路由组件使用  import()  动态导入,自动生成独立 chunk。

- 关注网络性能:单个 chunk 建议控制在 200KB 以内(移动端可更低),减少首屏加载时间。

 

通过以上配置,可灵活控制 Vite 打包时的分包粒度,平衡加载速度与缓存效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天吃饭的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值