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
  • 运行时快 → 路由懒加载、组件异步加载

相关推荐
前端之虎陈随易7 小时前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·vue.js·人工智能·typescript·node.js
一路向北he7 小时前
字节钢铁军团--“提供情境,而非控制”
java·开发语言·前端
kyriewen7 小时前
豆包和千问同时关了智能体,我用它们搭的 3 个自动化全废了——迁移方案整理
前端·javascript·ai编程
前端一小卒7 小时前
我用 TypeScript 从零手写了一个 Claude Code,然后发现它的核心只有 30 行
前端·agent
大圣编程9 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
yuhaiqiang9 小时前
随手 vibecoding 的浏览器插件已经 6000 多次下载,聊聊他的产品设计
前端·后端·面试
之歆9 小时前
Vue商品详情与放大镜组件
前端·javascript·vue.js
再吃一根胡萝卜10 小时前
如何把小米 MiMo 接入 CodeBuddy,打造私有 Agent
前端
负责的蛋挞11 小时前
异步HttpModule的实现方式
java·服务器·前端