一、构建分析

分析工具:rollup-plugin-visualizer

import { visualizer } from 'rollup-plugin-visualizer'
 
export default defineConfig({
  plugins: [
    visualizer({
      open: true, // 构建后自动打开报告
      gzipSize: true,
      brotliSize: true,
    }),
  ],
})

二、构建优化

🔧 常见优化技术 + Vite 对应实践

技术描述Vite 配置方式 / 插件示例
Tree-shaking剔除未使用的模块默认启用,确保使用 ES 模块语法导入
Code Splitting自动分割 chunk,支持按需加载import() 动态引入,或配置 build.rollupOptions.output.manualChunks
external 外部化依赖阻止特定模块被打包进产物,适合用 CDN 加载build.rollupOptions.external: ['vue']
Gzip / Brotli 压缩构建产物压缩,减小传输体积vite-plugin-compression 插件支持 gzip、brotli 压缩
图片资源压缩 / 优化WebP 转换、SVG 压缩、图片懒加载等vite-imagetoolsvite-plugin-imagemin 插件
按需加载组件 / 库函数减少打包体积,避免全量引入使用 unplugin-auto-importunplugin-vue-componentsbabel-plugin-import 等插件
替换大体积依赖替换为体积小、支持 Tree-shaking 的库lodashlodash-esmomentdayjs,或使用 vite-plugin-optimizer 替换默认打包
构建产物分析与优化点定位可视化分析每个 chunk 的构成rollup-plugin-visualizer 插件
静态资源预处理优化静态资源提前转换格式、压缩、合并public/ 中放置预处理资源,或通过插件管道(如 esbuild)预处理

✂️ manualChunks 示例(手动提取第三方库)

export default defineConfig({
  build: {
    rollupOptions: {
      output: {
        manualChunks(id) {
          if (id.includes('node_modules')) {
            if (id.includes('react')) return 'vendor-react'
            if (id.includes('lodash')) return 'vendor-lodash'
            return 'vendor'
          }
        },
      },
    },
  },
})

🧊 CDN 外部化优化(使用 unplugin-cdn)

import CDN from 'unplugin-cdn-import/vite'
 
export default defineConfig({
  plugins: [
    CDN({
      modules: [
        { name: 'vue', var: 'Vue', path: 'https://cdn.jsdelivr.net/npm/vue@3.4.0/dist/vue.global.prod.js' },
      ],
    }),
  ],
  build: {
    rollupOptions: {
      external: ['vue'],
    },
  },
})

🧯 vite-plugin-compression 示例(Gzip + Brotli)

import viteCompression from 'vite-plugin-compression'
 
export default defineConfig({
  plugins: [
    viteCompression({
      algorithm: 'gzip',
    }),
    viteCompression({
      algorithm: 'brotliCompress',
      ext: '.br',
    }),
  ],
})

三、构建优化(场景导向)

问题场景建议解决方案
第三方库体积大外部化依赖、使用 CDN、替换为小体积库
构建时间过长optimizeDeps 配置、预构建缓存、减少插件数量
dev 模式加载慢optimizeDeps.include 精选依赖
不知道谁贡献了最大体积使用 visualizer 插件生成依赖图
样式/图标冗余使用 Tailwind 的按需工具类、SVG 图标精简系统
产物 chunk 太碎或重复配置 manualChunks 合理拆分