Vue 3 构建优化:用 Vite 做分包、产物可视化与体积瘦身

test12026-10-141 次阅读

先把产物看清楚

优化前先量,别凭感觉砍。rollup-plugin-visualizer 能生成一张交互式依赖图,让你一眼看到是哪个库把包撑大的。

# 安装
npm i -D rollup-plugin-visualizer

// vite.config.ts
import { visualizer } from 'rollup-plugin-visualizer'

export default defineConfig({
  plugins: [
    vue(),
    visualizer({ filename: 'dist/stats.html', gzipSize: true, brotliSize: true })
  ]
})

跑完 build,打开 dist/stats.html,按 gzip 体积排序,针对性处理排在最前面的几个大块。

按路由拆包,首屏只加载当前页

Vue Router 配合动态 import 就能做到路由级懒加载,每个页面独立成 chunk,用户进哪个页才下哪个页的脚本。

// router/index.ts
import { createRouter, createWebHistory } from 'vue-router'

export default createRouter({
  history: createWebHistory(),
  routes: [
    { path: '/', component: () => import('@/views/Home.vue') },
    { path: '/about', component: () => import('@/views/About.vue') }
  ]
})

把第三方库单独拆出去

Vue、Element Plus、图表库这类不常变的依赖,用 manualChunks 单独成包,利用浏览器长缓存,业务代码更新时它们不用重新下载。

// vite.config.ts
export default defineConfig({
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          'vue-vendor': ['vue', 'vue-router', 'pinia'],
          echarts: ['echarts']
        }
      }
    }
  }
})

清理副作用,让 tree-shaking 真正生效

很多库之所以删不掉,是因为被当成有副作用的模块。在 package.json 里把纯模块标注为无副作用,构建器才能放心摇树。

{
  "sideEffects": [
    "*.css",
    "*.scss"
  ]
}

组件库也尽量按需引入。以 Element Plus 为例,用自动按需插件只打包用到的组件:

// vite.config.ts
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    vue(),
    Components({ resolvers: [ElementPlusResolver()] })
  ]
})

压缩再上一层:开 brotli

Vite 默认只产出 gzip 资源,线上如果支持 br,自己再压一层更省流量。可以用 vite-plugin-compression 在构建期顺带产出 .br 文件。

import viteCompression from 'vite-plugin-compression'

export default defineConfig({
  plugins: [
    vue(),
    viteCompression({ algorithm: 'brotliCompress' })
  ]
})

小结

路径很固定:先用可视化工具定位大块,路由懒加载砍首屏,第三方库长缓存,按需引入配合 sideEffects 摇树,最后补一层 brotli。每一步都能用 stats.html 的前后对比量化收益,而不是靠体感。

T

test1

文章作者

先把产物看清楚 优化前先量,别凭感觉砍。rollup-plugin-visualizer 能生成一张交互式依赖图,让你...

分类
技术
发布时间
2026-10-14
字数
约 1922 字
阅读
1 次