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

相关推荐
用户14567756103715 分钟前
亲测好用!简单实用的图片尺寸调整工具
前端
索西引擎16 分钟前
npm、yarn、pnpm
前端·npm·node.js
天生我材必有用_吴用1 小时前
Vue3 + VitePress 搭建组件库文档平台(结合 Element Plus 与 Arco Design Vue)—— 超详细图文教程
前端
liu****1 小时前
基于websocket的多用户网页五子棋(八)
服务器·前端·javascript·数据库·c++·websocket·个人开发
San301 小时前
深入理解 JavaScript 函数:从基础到高阶应用
前端·javascript·node.js
ttyyttemo1 小时前
Column,rememberScrollState,记住滚动位置
前端
芒果茶叶2 小时前
并行SSR,SSR并行加载
前端·javascript·架构
vortex52 小时前
解决 Kali 中 Firefox 下载语言包和插件速度慢的问题:配置国内镜像加速
前端·firefox·腾讯云
修仙的人2 小时前
Rust + WebAssembly 实战!别再听说,学会使用!
前端·rust
maxine2 小时前
JS Entry和 HTML Entry
前端