Vite 8.0 正式发布:告别 esbuild + Rollup,Rust 重构带来 30 倍构建加速
Vite 8.0 的发布,几乎可以说是这个项目诞生以来最重要的一次架构转向。
过去,Vite 一直建立在“双构建器并行”的模式上;而这一次,它终于彻底告别了那套老路,转向了一条更统一、也更激进的新方案:基于 Rust 的一体化工具链。
结果也很直接——性能上去了,结构变简单了,开发体验反而更顺了。
下面,就来看看 Vite 8.0 到底带来了什么,以及它为什么值得你认真关注。
双构建器时代,正式结束了
从很早开始,Vite 的核心模式其实一直是“两套引擎同时工作”:
esbuild:负责开发阶段的极速体验,比如 TypeScript / JSX 转换、依赖预构建
Rollup:负责生产环境构建、chunk 切分,以及整个成熟的插件生态
这套组合在过去几年里跑得确实非常成功,也正因为如此,Vite 才能在前端工具领域快速站稳。
但问题也越来越明显。
两条独立的转换链路,意味着:
两套行为逻辑
两套插件系统
越来越多的中间胶水代码
以及围绕模块处理不一致而不断积累的边缘问题
这些东西,早晚都会变成包袱。
而 Vite 8 做的第一件大事,就是不再继续背这个包袱。
Rolldown 出场
Vite 8 背后最关键的新主角,就是 Rolldown。
这是一个由 VoidZero 团队开发的、基于 Rust 的新一代 bundler,它的目标非常明确:不是辅助 esbuild 和 Rollup,而是直接把它们原本承担的核心角色统一起来。
这一变化的影响,远不止“换了个工具”这么简单。
因为一旦开发和生产走向同一个核心构建体系,很多过去绕不开的问题,就有机会从根上消失。
Vite 官方给出的变化非常亮眼:
构建速度:相比 Rollup,构建可快 10 到 30 倍
插件兼容性:绝大多数现有 Vite 插件,无需修改就能继续工作
新能力开放:像 Full Bundle Mode、灵活的 chunk 切分、模块级持久缓存、Module Federation 等,过去在双构建器模型下很难自然实现的能力,现在终于有了更合理的落点
更关键的是,这不是只停留在口号层面的提升。在 beta 阶段,一些真实项目已经给出了非常夸张的加速结果:
Linear:46 秒 → 6 秒
Ramp:整体提升 57%
Mercedes-Benz.io:最高提升 38%
Beehiiv:提升 64%
这些数字放在前端工程世界里,已经不是“小优化”,而是能直接改变团队体感的级别了。
VoidZero 工具链
如果只把 Vite 8 理解成“Vite 换成了 Rolldown”,其实还不够。
更准确的说法应该是:Vite 8 正在把自己变成一整条端到端工具链的入口。
这套新的分层结构,可以概括成三层:
Vite:编排层,负责开发体验和 dev server
Rolldown:打包层,负责链接和产物组织
Oxc:编译层,负责解析和转换
这三层协同起来的意义非常大。
它意味着,从代码解析、模块解析、语法转换,到最终打包和压缩,整条链路终于开始朝着统一行为、统一语义、统一优化方向发展。
而这种一致性,一旦建立起来,就会释放很多过去做不到的优化空间。
比如,Oxc 的语义分析能力,就可以反过来帮助 Rolldown 做更聪明的 tree-shaking。这种跨层协同,在以前双引擎拼接的状态下,几乎很难真正做深。
新特性与开发者体验提升
Rolldown 是最显眼的大 headline,但 Vite 8 并不只是“底层替换”这么单薄。
它还顺手做了一批非常实用的 DX 升级,而且很多以前要靠样板代码或者额外插件才能解决的事,现在直接内置了。
内建 Devtools
Vite 8 现在提供了一个可选的 devtools 开关。
打开之后,你可以直接在 dev server 里用上一整套调试和分析能力,包括:
查看模块图
观察 transform 管线
实时理解当前构建链条到底发生了什么
这对调试复杂项目、分析构建异常、看插件行为,帮助会非常大。
内建 tsconfig paths 支持
以前如果你想让 Vite 识别 TypeScript 路径别名,通常还得额外装插件。现在,直接把 resolve.tsconfigPaths 设为 true 就行。
当然,它是 opt-in 的。因为官方也明确提到,这会带来一点点性能成本。但对于很多项目来说,这点代价完全值得。
原生支持 emitDecoratorMetadata
这对 NestJS、Inversify 以及一类 heavily 依赖元数据的框架来说,是非常实在的改进。
以前这些场景往往得额外调配置、补兼容。现在,标准 TypeScript decorators 可以更自然地工作起来。
Wasm SSR 支持
Vite 8 现在让 .wasm?init 这类导入方式在 SSR 场景里也能工作了。
这意味着,WebAssembly 的使用边界又被往服务端渲染方向推了一步。对于一些依赖 Wasm 做性能加速或底层能力封装的项目,这会很有价值。
浏览器控制台转发到终端
通过开启 server.forwardConsole,客户端浏览器里的 console.log 和运行错误,可以直接被转发到你的终端里。
这个小功能看起来不起眼,但在实际开发里真的很爽。
尤其是当你在和 AI 编码代理协作时,它会特别有用。Vite 甚至给出了一个很有意思的细节:
如果系统检测到 coding agent 的存在,这个能力会自动启用。
也就是说,你的 AI 搭档不再需要你手动复制浏览器报错给它看,它可以直接“看到”运行时错误。
这一步,对 AI 辅助开发体验来说,其实很关键。
react 生态同步升级:@vitejs/plugin-react v6
React 插件这次也跟着做了不小的调整,而且整体方向非常明显:更少 babel,更靠近新的 Rust 路线。
默认走 Oxc,摆脱 Babel 依赖
在 React Refresh 相关转换上,v6 默认开始使用 Oxc。带来的好处也很直接:
安装体积变小
冷启动更快
整个链路更统一
对 React Compiler 更友好
如果你已经在尝试新的 React Compiler,那么 v6 也已经为这类场景准备了 reactCompilerPreset,可以和 @rolldown/plugin-babel 一起使用。
这意味着,Vite 不只是要跟上 React 的变化,它还在主动给下一阶段的 React 玩法留入口。
需求与内部变更
Node.js 版本要求没有放松
Vite 8 依然要求:
Node.js 20.19+
或 22.12+
这和 Vite 7 保持一致。
原因在于,这两个版本支持 require(esm) 无需额外 flag,也因此 Vite 才能更彻底地走向 ESM-only 发行方式。
安装体积会变大一点
很多人升级后可能会发现:安装包比以前重了。
官方给出的解释大致是,多了大约 15 MB 左右:
约 10 MB:来自 lightningcss,现在它成了高性能 CSS 压缩的标准方案
约 5 MB:来自 Rolldown 二进制文件,它显然更在意执行速度,而不是把二进制尽量做小
这类体积增长,放在本地开发工具里,其实完全可以理解。毕竟它换回来的,是明显更强的执行效率。
接下来还会发生什么?
Rolldown 集成进来之后,Vite 的路线图一下子被打开了很多。
官方已经明确提到,后面还有不少值得期待的方向。
Full Bundle Mode(实验中)
开发阶段也进行打包,行为更接近生产环境。
目前早期数据已经很能打:
dev server 启动快约 3 倍
全量 reload 快约 40%
网络请求数下降约 10 倍
如果这个模式后续成熟下来,前端本地开发体验可能会出现新一轮明显变化。
Raw AST Transfer
让 JavaScript 插件可以以更低的序列化成本访问 Rust 生成的 AST。这会直接改善插件层和底层编译层之间的沟通效率。
Native MagicString Transforms
允许你继续在 JavaScript 里写 transform 逻辑,但字符串操作底层可以交给 Rust 跑。这本质上是把“写插件的灵活性”和“底层执行速度”尽量一起保住。
稳定版 Environment api
官方也在继续推进 Environment API 的最终定型,希望它能在整个生态里稳定下来。这个东西一旦成熟,会进一步决定未来很多工具和插件该如何围绕 Vite 协作。
最后
Vite 8 的意义,不只是“更快了”。
真正重要的是,它终于不再满足于做一个体验很好的 dev server 外壳,而是开始把自己重新定义成一条完整、统一、可持续进化的现代前端工具链。
从 esbuild + Rollup 的双轨模式,走向 Vite + Rolldown + Oxc 的统一体系,这一步不是普通升级,而是一次很彻底的方向切换。
对开发者来说,最直观的感受可能会是:
构建更快
配置更少
行为更一致
和未来生态的连接更顺
而从更长远的角度看,这可能也是 Vite 真正进入下一阶段的开始。这一次,它不是在微调体验。它是在重新定义自己的地基。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!