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

相关推荐
Felicity_Gao2 小时前
uni-app VOD 与 COS 选型、开发笔记
前端·笔记·uni-app
我狸才不是赔钱货4 小时前
前端技术栈全景图:从HTML到现代框架的演进之路
前端·html
百花~4 小时前
前端三剑客之一 HTML~
前端·html
lang201509285 小时前
Spring远程调用与Web服务全解析
java·前端·spring
listhi5207 小时前
利用React Hooks简化状态管理
前端·javascript·react.js
一点一木7 小时前
🚀 2025 年 10 月 GitHub 十大热门项目排行榜 🔥
前端·人工智能·github
华仔啊7 小时前
这个Vue3旋转菜单组件让项目颜值提升200%!支持多种主题,拿来即用
前端·javascript·css
非凡ghost7 小时前
Adobe Lightroom安卓版(手机调色软件)绿色版
前端·windows·adobe·智能手机·软件需求
BestAns8 小时前
Postman 平替?这款轻量接口测试工具,本地运行 + 批量回归超实用!
前端
专注前端30年8 小时前
Webpack进阶玩法全解析(性能优化+高级配置)
前端·webpack·性能优化