
| Vite 7 (39.59s) | Vite 8 优化后 (13.65s) |
|---|---|
![]() |
![]() |
实测:vue3-element-admin(3157 模块),构建时间提升 ~65%
Vite 8 于 2026年3月12日 正式发布,核心构建引擎全面切换为 Rust 编写的 Rolldown。本文记录 vue3-element-admin 从 Vite 7 升级到 Vite 8 的完整配置变更和性能对比。
相关源码 :vue3-element-admin
官方文档 :Vite 8 发布公告 · 迁移指南
Vite 8 架构变更
构建工具对比
| 组件 | Vite 7 | Vite 8 |
|---|---|---|
| 开发/生产打包 | esbuild + Rollup | Rolldown |
| JavaScript 转换 | esbuild | Oxc |
| JS 压缩 | Terser / esbuild | Oxc Minifier |
| CSS 压缩 | esbuild | Lightning CSS |
Vite 7 存在"双工具"问题:开发用 esbuild,生产用 Rollup,行为不一致。Vite 8 使用 Rolldown 统一两者,彻底解决"开发正常、生产报错"的痛点。
行业案例 :Linear 团队报告构建时间从 46 秒降至 6 秒,提升约 87%。
配置迁移
完整对比
Vite 7 配置:
typescript
import { resolve } from "path";
import { name, version, engines, dependencies, devDependencies } from "./package.json";
const __APP_INFO__ = {
pkg: { name, version, engines, dependencies, devDependencies },
buildTimestamp: Date.now(),
};
const pathSrc = resolve(__dirname, "src");
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
const env = loadEnv(mode, process.cwd());
const isProduction = mode === "production";
return {
resolve: {
alias: { "@": pathSrc },
},
// ...其他配置不变
build: {
chunkSizeWarningLimit: 2000,
reportCompressedSize: false,
minify: isProduction ? "terser" : false,
terserOptions: isProduction
? {
compress: {
drop_console: true,
drop_debugger: true,
},
}
: undefined,
rollupOptions: {
output: {
entryFileNames: "js/[name].[hash].js",
chunkFileNames: "js/[name].[hash].js",
assetFileNames: (assetInfo: any) => {
if (!assetInfo.name) {
return "assets/[name].[hash][extname]";
}
const info = assetInfo.name.split(".");
let extType = info[info.length - 1];
if (/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/i.test(assetInfo.name)) {
extType = "media";
} else if (/\.(png|jpe?g|gif|svg)(\?.*)?$/.test(assetInfo.name)) {
extType = "img";
} else if (/\.(woff2?|eot|ttf|otf)(\?.*)?$/i.test(assetInfo.name)) {
extType = "fonts";
}
return `${extType}/[name].[hash].[ext]`;
},
},
},
},
};
});
Vite 8 配置:
typescript
import { resolve } from "path";
import { name, version } from "./package.json";
const __APP_INFO__ = {
pkg: { name, version },
buildTimestamp: Date.now(),
};
// ESM 模式下使用 import.meta.dirname(Node 20.11+)
const pathSrc = resolve(import.meta.dirname, "src");
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
const env = loadEnv(mode, process.cwd());
return {
resolve: {
alias: { "@": pathSrc },
},
// ...其他配置不变
// 构建配置(Vite 8 使用 Rolldown + Oxc)
build: {
chunkSizeWarningLimit: 1000,
reportCompressedSize: false,
cssMinify: "lightningcss",
// minify 默认使用 'oxc',压缩速度比 terser 快 30-90 倍
rolldownOptions: {
output: {
entryFileNames: "js/[name].[hash].js",
chunkFileNames: "js/[name].[hash].js",
assetFileNames: (assetInfo: any) => {
if (!assetInfo.name) {
return "assets/[name].[hash][extname]";
}
const info = assetInfo.name.split(".");
let extType = info[info.length - 1];
if (/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/i.test(assetInfo.name)) {
extType = "media";
} else if (/\.(png|jpe?g|gif|svg)(\?.*)?$/.test(assetInfo.name)) {
extType = "img";
} else if (/\.(woff2?|eot|ttf|otf)(\?.*)?$/i.test(assetInfo.name)) {
extType = "fonts";
}
return `${extType}/[name].[hash].[ext]`;
},
},
},
},
};
});
迁移要点
| 变更项 | Vite 7 | Vite 8 | 说明 |
|---|---|---|---|
| 打包器选项 | rollupOptions |
rolldownOptions |
Rollup 已弃用,改用 Rolldown |
| JS 压缩 | minify: "terser" |
默认 oxc(可省略) |
比 Terser 快 30-90 倍 |
| Terser 配置 | terserOptions: { drop_console } |
删除 | Oxc 暂不支持,改用代码规范约束 |
| CSS 压缩 | esbuild(默认) | cssMinify: "lightningcss" |
Rust 编写,更快 |
| ESM 路径 | __dirname |
import.meta.dirname |
CJS 变量在 ESM 中不存在 |
性能对比
生产构建耗时
基于 vue3-element-admin 项目实测(3157 模块),多次构建验证:
| 版本 | 第 1 次 | 第 2 次 | 第 3 次 | 平均 | 提升 |
|---|---|---|---|---|---|
| Vite 7 | 38.27s | 38.35s | 37.59s | 38.07s | - |
| Vite 8 | 13.43s | 12.99s | 13.10s | 13.17s | ~66% |
构建耗时截图:
| Vite 7 | Vite 8 |
|---|---|
![]() |
![]() |
打包体积
| 类型 | Vite 7 | Vite 8 | 变化 |
|---|---|---|---|
| 最大 JS | 1,284 kB | 1,015 kB | -21% |
| 最大 CSS | 770 kB | 705 kB | -8% |
插件耗时分析
Vite 8 构建日志中的 PLUGIN_TIMINGS 揭示了耗时分布:
| 插件 | 耗时占比 |
|---|---|
| unocss:global:build:scan | 34-44% |
| vite:css | 13-15% |
| unocss:global:build:generate | 13-18% |
| unocss:transformers:pre | 6-9% |
UnoCSS 是当前构建的主要瓶颈,占比超过 50%。如果项目 UnoCSS 规则较多,可考虑精简
uno.config.ts中的规则来进一步加速。
性能提升原理
Rolldown 统一开发生产
Vite 7 使用 esbuild 开发、Rollup 生产,存在行为差异。Vite 8 统一使用 Rolldown,零转换开销。
Rust vs JavaScript
Rolldown 用 Rust 编写,相比 JavaScript 的 Rollup:
- 无 JIT 预热,直接执行
- 无 GC 停顿
- 原生多线程,充分利用多核 CPU
Oxc 替代 Terser
Oxc Minifier 同样是 Rust 编写,压缩速度比 Terser 快 30-90 倍,压缩率仅低 0.5%-2%。
常见问题
插件不兼容
Error: Plugin xxx is not compatible with Vite 8
解决方案:检查插件是否有 Vite 8 兼容版本,或暂时锁定 Vite 版本等待插件更新。
CommonJS 模块导入错误
Error: require() of ES Module
解决方案:
typescript
export default defineConfig({
legacy: {
inconsistentCjsInterop: true,
},
});
CSS 处理差异
Lightning CSS 处理某些 CSS 语法可能与 esbuild 不同,如遇到问题可检查 CSS 语法兼容性。
卸载 terser
Vite 8 默认使用 Oxc 压缩,不再需要 terser 依赖:
bash
pnpm remove terser
升级验证
bash
# 1. 清理缓存和依赖
rm -rf node_modules .vite
pnpm install
# 2. 启动开发服务器
pnpm dev
# 3. 类型检查
pnpm type-check
# 4. 生产构建
pnpm build
# 5. 预览构建结果
pnpm preview
总结
Vite 8 通过全面拥抱 Rust 生态(Rolldown、Oxc、Lightning CSS),实现了质的飞跃。基于 vue3-element-admin 项目实测:
| 指标 | Vite 7 | Vite 8 | 变化 |
|---|---|---|---|
| 构建时间 | 39.59s | 13.65s | -65% |
| 最大 JS 体积 | 1,284 kB | 1,015 kB | -21% |
| 最大 CSS 体积 | 770 kB | 705 kB | -8% |
配置迁移简单,核心改动 5 项,收益显著,推荐升级。
相关开源项目:
| 项目 | 简介 |
|---|---|
| vue3-element-admin | Vue 3 + Element Plus 权限管理系统 |
| youlai-boot | Spring Boot 4 后端权限系统 |
在线体验 :https://vue.youlai.tech
如果本文对你有帮助,欢迎点赞收藏,如有问题欢迎评论区交流。

