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

相关推荐
鹏多多几秒前
Flutter输入框TextField的属性与实战用法全面解析+示例
android·前端·flutter
子不语1804 分钟前
Matlab读取文件
前端·javascript·matlab
kylinmin23 分钟前
卸载微软电脑管家:一次性彻底移除
前端·ui·xhtml
qq_4275060832 分钟前
基于Vue 3和Element Plus利用h、render函数写一个简单的tooltip局部or全局指令
前端·javascript·vue.js
泥菩萨^_^1 小时前
【每天认识一个漏洞】React 和 Next.js RCE漏洞
前端·javascript·react.js
1024肥宅1 小时前
JavaScript常用设计模式完整指南
前端·javascript·设计模式
董世昌411 小时前
js怎样控制浏览器前进、后退、页面跳转?
开发语言·前端·javascript
走,带你去玩1 小时前
uniapp live-pusher + 腾讯云直播
前端·javascript·uni-app
徐同保1 小时前
electron打包项目
前端·javascript·electron
Maybyy1 小时前
如何在项目里面添加一个可以左右翻动并显示指定日期的日历
前端·vue.js