vite打包优化有哪些

好问题 👍

Vite 项目打包优化 时,主要关注 构建速度产物体积 两个方向。下面我给你系统梳理一下常用优化手段:


一、构建速度优化

1. 使用 esbuild 加速

  • Vite 内部默认用 esbuild 来做依赖预构建,速度比传统 webpack 快很多。
  • 可以在 vite.config.js 配置 optimizeDeps
arduino 复制代码
export default {
  optimizeDeps: {
    include: ['axios', 'lodash-es'], // 预构建依赖,避免每次冷启动慢
  }
}

2. 缓存依赖

  • 启动时会在 node_modules/.vite 生成缓存文件,下次启动直接用缓存。
  • CI/CD 可以利用 pnpm install --frozen-lockfile && pnpm build 并缓存 .vitenode_modules

3. 按需引入

  • UI 库(Ant Design Vue / Element Plus)不要全量引入,要用 unplugin-vue-componentsunplugin-auto-import 自动导入,减少打包体积。

二、产物体积优化

1. 代码分包(分模块打包)

  • Vite 使用 rollup 打包,可以通过 build.rollupOptions.output.manualChunks 拆分依赖:
css 复制代码
export default {
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          vue: ['vue', 'vue-router', 'pinia'],
          echarts: ['echarts'],
          lodash: ['lodash-es']
        }
      }
    }
  }
}

这样能让依赖分开缓存,避免用户每次都下载大包。

2. 压缩代码

  • 默认使用 esbuild 压缩,速度快。
  • 如果需要更高压缩率,可改用 terser
yaml 复制代码
export default {
  build: {
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true,
      }
    }
  }
}

3. 资源压缩(gzip / brotli)

  • 使用 vite-plugin-compression
javascript 复制代码
import viteCompression from 'vite-plugin-compression'

export default {
  plugins: [
    viteCompression({ algorithm: 'gzip' }), // 或 brotli
  ]
}

在服务器端开启 gzip/brotli 响应,能大幅减少传输体积。

4. 图片优化

  • 小图片用 base64 内联,大图片用 vite-imagetoolsimage-webpack-loader 压缩。
  • SVG 建议用 vite-plugin-svgr 转 React/Vue 组件,避免重复加载。

5. Tree-shaking & 摇树优化

  • 避免 import * as _ from 'lodash',用 import { debounce } from 'lodash-es'
  • 选择 -es 版本库,天然支持 tree-shaking。

6. CDN 加速(external 依赖)

  • 把大依赖走 CDN,不打包进产物,减少构建时间和包大小:
css 复制代码
export default {
  build: {
    rollupOptions: {
      external: ['vue', 'echarts'],
      output: {
        globals: {
          vue: 'Vue',
          echarts: 'echarts'
        }
      }
    }
  }
}

三、运行时优化

1. 路由懒加载

javascript 复制代码
const Home = () => import('@/views/Home.vue')

2. 组件按需加载

  • 表格、图表等大组件用 import() 异步加载。

3. SSR / SSG

  • 如果是内容型网站,考虑用 Vite SSR 或 Nuxt,减少首屏白屏时间。

四、分析与调试

1. 打包分析工具

sql 复制代码
npm install rollup-plugin-visualizer -D
arduino 复制代码
import { visualizer } from 'rollup-plugin-visualizer'

export default {
  plugins: [visualizer({ open: true })]
}

能看到每个依赖占用体积。


✅ 总结一下:

  • 开发阶段快 → optimizeDeps、缓存、按需加载
  • 打包产物小 → manualChunks 分包、gzip/brotli 压缩、图片优化、CDN external
  • 运行时快 → 路由懒加载、组件异步加载

相关推荐
C澒6 分钟前
Vue 项目渐进式迁移 React:组件库接入与跨框架协同技术方案
前端·vue.js·react.js·架构·系统架构
清山博客40 分钟前
OpenCV 人脸识别和比对工具
前端·webpack·node.js
要加油哦~42 分钟前
AI | 实践教程 - ScreenCoder | 多agents前端代码生成
前端·javascript·人工智能
程序员Sunday1 小时前
说点不一样的。GPT-5.3 与 Claude Opus 4.6 同时炸场,前端变天了?
前端·gpt·状态模式
yq1982043011561 小时前
静思书屋:基于Java Web技术栈构建高性能图书信息平台实践
java·开发语言·前端
aPurpleBerry1 小时前
monorepo (Monolithic Repository) pnpm rush
前端
青茶3601 小时前
php怎么实现订单接口状态轮询请求
前端·javascript·php
鹏北海1 小时前
micro-app 微前端项目部署指南
前端·nginx·微服务
发现一只大呆瓜1 小时前
虚拟列表:从定高到动态高度的 Vue 3 & React 满分实现
前端·vue.js·react.js
css趣多多2 小时前
add组件增删改的表单处理
java·服务器·前端