当前位置: 首页 > news >正文

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 打包时的分包粒度,平衡加载速度与缓存效率。

http://www.xdnf.cn/news/1057591.html

相关文章:

  • 使用 React-i18next 在 TypeScript 的 Next.js 应用中实现国际化
  • ARM单片机启动流程(一)(万字解析,纯干货分享)
  • CVPR 2025最佳论文详解|VGGT:纯前馈Transformer架构,3D几何感知「大一统」模型来了!
  • 精益数据分析(108/126):媒体网站用户参与时间优化与分享行为解析
  • 【Unity笔记】Unity URP 渲染中的灯光数量设置— 场景、使用方法与渲染原理详解
  • Python 列表与元组的性能差异:选择合适的数据结构
  • 人机交互的趋势判断-范式革命的推动力量
  • SCRM客户关系管理软件的界面设计原则:提升用户体验与交互效率
  • 【Mysql】MySQL的MVCC及实现原理,核心目标与全流程图解
  • 获取ip地址安全吗?如何获取静态ip地址隔离ip
  • 常见航空数码相机
  • 基于SpringBoot的民宿管理平台-037
  • 【Linux指南】文件内容查看与文本处理
  • 操作系统引导和虚拟机(包含os结构,选择题0~1题无大题)
  • 编译链接实战(27)动态库实现变了,可执行程序需要重新编译吗
  • 互联网思维概念和落地
  • 如何写一个简单的python类class
  • 影视剧学经典系列-梁祝-《闲情赋》
  • 如何让DeepSeek-R1-Distill-Qwen-32B支持Function calling
  • 学习昇腾开发的第三天--将服务器连接网络
  • 【锂电池剩余寿命预测】XGBoost锂电池剩余寿命预测(Pytorch完整源码和数据)
  • 外观模式Facade Pattern
  • 02- 六自由度串联机械臂(ABB)运动学分析
  • C++面向对象编程:简洁入门
  • RPG29:制作ui基础
  • YoloV12改进策略:Block改进|MKP,多尺度卷积核级联结构,增强感受野适应性|即插即用|AAAI 2025
  • 命令模式Command Pattern
  • 多线程并发编程硬核指南:从互斥锁到生产者模型的全场景实战与原理揭秘
  • C++(初阶)(二十一)——unordered_set和unordered_map
  • Addressable-引用计数