Vite 8发布:构建速度快了10倍
如果你写前端代码,肯定听过Vite这个名字。简单说,它就是帮你把写的代码变成能跑在浏览器里的东西的工具。这几年,已经有超过一半的前端开发者在用Vite了。
前几天Vite 8的测试版出来了。这次不是小打小闹的升级,而是把底层的"发动机"整个换掉了。有团队试过之后发现,打包时间从46秒直接降到了6秒。
这篇文章就给你讲讲Vite 8到底变了啥,对你的日常开发有啥用,以及你现在要不要升级。
01 以前的Vite:像混动汽车,两头跑
要理解Vite 8的厉害,得先知道以前它是怎么工作的。
Vite刚出来的时候,做了一个特别聪明的设计:开发的时候用一个引擎,打包的时候换另一个。
开发时用esbuild:这东西用Go语言写的,跑得飞快,你改代码能立刻看到效果
打包时用Rollup:这东西打包很稳,插件多,能把代码优化得好好的
这个设计在当时确实好使,就像混动汽车——市区用电,高速用油,各取所长。
但时间长了,问题也来了:
两个引擎说不一样的话:写插件要写两套,有时候开发环境好好的,一打包就出问题
中间得有人当翻译:Vite团队要写很多"胶水代码"让这两个引擎好好配合
随着项目越来越大,这些问题越来越明显。Vite团队想了好久,最后决定:干脆自己造一个引擎吧!
02 现在的Vite 8:换上纯电超跑,一路到底
这个新引擎叫Rolldown。它用Rust语言写的——Rust是一种性能特别强的编程语言,比JavaScript快得多。
现在从开发到打包,全程都用这一个引擎。这就好比从"混动车"换成了"纯电超跑":
到底快了多少?
Vite官方和一些早期试用的团队放出了数据:
Linear团队:原来打包要等46秒,现在只要6秒
Ramp团队:构建时间少了57%
Beehiiv团队:构建时间少了64%
奔驰技术团队:构建时间最多少了38%
这意味着什么?以前你下班前运行打包命令,可以去倒杯咖啡慢慢等;现在刚站起身,活儿已经干完了。
03 代码说话:Vite 8的新特性怎么用?
光说快不行,得看看代码里怎么用。下面这几个新特性,都是日常开发能用得上的。
1. 路径别名,开箱即用
以前你想用@/components/Button这样的简洁路径,得先装个插件,然后在vite.config.js里配一遍,再到tsconfig.json里再配一遍。
// vite.config.js - Vite 8
import { defineConfig } from 'vite'
export default defineConfig({
resolve: {
tsconfigPaths: true // 一行搞定,自动读tsconfig.json里的配置
}
})从此告别"配了两遍还对不上"的烦恼。
2. 装饰器支持,对后端框架更友好
如果你用NestJS或者TypeORM,肯定写过这样的代码:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
@Length(10, 20)
name: string;
}以前Vite看到这些@符号可能会懵,得专门配置。Vite 8直接原生支持emitDecoratorMetadata,零配置就能用。对写全栈的同学来说,这能省不少事。
3. WebAssembly支持更完善
如果你要用WebAssembly做高性能计算,比如处理图片:
// 以前WASM在服务端渲染时可能报错
// Vite 8完美支持服务端渲染
import wasmModule from './image-processor.wasm?init'
const initWasm = async () => {
const module = await wasmModule({
// 在服务端也能正常运行
env: { ... }
})
return module
}4. manualChunks改名了
以前你可能是这么配代码分割的:
// 旧写法,Vite 8直接报错
rollupOptions: {
output: {
manualChunks: {
'vue-vendor': ['vue', 'pinia'],
'monaco': ['monaco-editor'],
}
}
}// 新写法
rollupOptions: {
output: {
advancedChunks: {
groups: [
{ name: 'vue-vendor', test: /[\\/]node_modules[\\/](vue|pinia)[\\/]/ },
{ name: 'monaco', test: /[\\/]node_modules[\\/]monaco-editor[\\/]/ },
]
}
}
}改起来也不麻烦,就是把名字换一下,规则稍微写细一点。
04 我该不该升级?
这是个好问题。给你两个建议:
如果是新项目
创建一个新项目只需要:
然后把package.json里的Vite版本改成^8.0.0-beta.0就行。
如果是老项目
分两种情况:
项目不大:可以尝试直接升级。改一下package.json:
{
"devDependencies": {
"vite": "^8.0.0-beta.0"
}
}运行npm install,然后npm run build。如果一切正常,恭喜你升级成功!
项目很大:建议"渐进式迁移"。Vite团队贴心地做了一个叫rolldown-vite的预览包:
npm install -D rolldown-vite然后你可以先试试新引擎,等所有问题都解决了再正式升级。
要改代码吗?
大概率不用。Vite团队很注重兼容性,大部分现有插件都能直接用。只有极少数依赖老引擎特有功能的项目,才需要微调配置。
比如以前有些项目会这样配置:
// 如果你用了这个,可能需要调整
optimizeDeps: {
esbuildOptions: {
// 一些esbuild特有的配置
}
}遇到这种情况,查一下官方迁移指南就行。
05 升级要注意的几个地方
esbuild要被淘汰了:optimizeDeps.esbuildOptions这个配置现在不推荐用了,以后会彻底移除。Vite现在用Oxc做JavaScript转换,用Lightning css做CSS压缩。
浏览器兼容性变了:默认支持的浏览器版本提高了,现在是Chrome 111、Firefox 114以上。如果你要兼容老浏览器,得自己配一下build.target。
如果你的项目依赖esbuild:比如用了某个插件里的transformWithEsbuild函数,得自己装一下esbuild,因为Vite 8不再自带esbuild了。
如果遇到打包问题:可以在vite.config.js里加一行legacy.inconsistentCjsInterop: true试试,这能暂时回到以前的CommonJS处理方式。
写在最后
Vite 8的发布,不只是"更快了"这么简单。它代表了前端工具正在从"拼凑"走向"统一"。
以前我们要用好几个工具拼在一起干活,每个工具都有自己的脾气。现在Vite想把这一整套东西都自己做,从解析、转换到打包、压缩,全都用Rust写,又快又稳。
对咱们普通开发者来说,最直接的好处就是:等待时间更短,糟心事更少,写代码更爽。
如果你还没试过Vite 8,不妨周末拿个小项目体验一下。从跑npm run build那一刻开始,你就能感受到什么叫"快如闪电"。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!