Vite 8 稳定版现已正式发布。
此版本一大重点内容就是,将用于开发阶段快速构建的 esbuild 和用于优化生产环境构建的 Rollup 两个打包工具合二为一:搭载了 Rolldown 作为其唯一的、统一的、基于 Rust 的打包工具,在保持完全插件兼容性的同时,构建速度提升了 10-30 倍。
![]()
根据介绍,Rolldown 设计目标有三个:
- 性能: Rolldown 使用 Rust 编写,运行速度接近原生 Rust。在基准测试中,它的速度比 Rollup 快 10-30 倍,性能水平与 esbuild 相当。
- 兼容性: Rolldown 支持与 Rollup 和 Vite 相同的插件 API。大多数现有的 Vite 插件都能与 Vite 8 即插即用。
- 高级功能:单一的统一打包器解锁了双打包器设置难以或不可能实现的功能,包括完整的打包模式、更灵活的块分割、模块级持久缓存和模块联邦支持。
公告称,这是自 Vite 2 以来最重要的架构变革。Vite 8 将 Vite 打造成一个端到端工具链的入口,该工具链由紧密协作的团队组成:构建工具 (Vite)、打包工具 (Rolldown) 和编译器 (Oxc)。这种协同确保了整个技术栈(从解析和解析到转换和压缩)行为的一致性。
“这也意味着我们可以随着 JavaScript 的发展快速采用新的语言规范。通过跨层深度集成,我们可以实现以前难以企及的优化,例如利用 Oxc 的语义分析来改进 Rolldown 中的 tree-shaking 算法。 ”
Vite 8 需要 Node.js 20.19+、22.12+,与 Vite 7 的要求相同。这些版本范围确保 Node.js 无需任何 flag 即可支持require(esm),从而使 Vite 可以仅以 ESM 格式分发。
除了 Rolldown 集成之外,Vite 8 还包含以下几个值得注意的功能:
-
集成开发工具: Vite 8 提供devtools选项以启用 Vite Devtools,Vite Devtools 是一款用于调试和分析的开发者工具。Vite Devtools 可直接从开发服务器提供对 Vite 项目的更深入洞察。
-
内置 tsconfigpaths支持:开发者可以通过将resolve.tsconfigPaths设置为true来启用 TypeScript 路径别名解析。此功能会略微降低性能,并且默认情况下未启用。
-
emitDecoratorMetadata支持: Vite 8 现在内置了对 TypeScriptemitDecoratorMetadata选项的自动支持,无需外部插件。详情可参阅“功能”页面。
-
Wasm SSR 支持: .wasm?init导入功能现在可以在 SSR 环境中运行,将 Vite 的 WebAssembly 功能扩展到服务器端渲染。
-
浏览器控制台转发: Vite 8 可以将浏览器控制台日志和错误转发到开发服务器终端。此功能在配合 coding agents 使用时尤为实用,因为运行时客户端错误会显示在 CLI 输出中。通过server.forwardConsole启用此功能,系统会在检测到 coding agent 时自动激活。
@vitejs/plugin-reactv6
与 Vite 8 一同发布的还有@vitejs/plugin-reactv6 版本。该插件使用 Oxc 进行 React Refresh 转换。不再依赖 Babel,安装包体积更小。
对于需要 React 编译器的项目,v6 提供了一个可以与@rolldown/plugin-babel配合使用的reactCompilerPreset辅助工具,为用户提供了一个明确的选择加入路径,而不会给默认设置带来负担。
参阅发行说明了解更多详情。注意, v5 仍可与 Vite 8 兼容,因此可以在升级 Vite 后再升级该插件。
展望未来
Rolldown 的集成为改进和优化打开了大门。接下来的工作重点包括:
- Full Bundle Mode(实验性):此模式在开发过程中将模块打包,类似于生产环境构建。初步结果显示,开发服务器启动速度提升 3 倍,完全重新加载速度提升 40%,网络请求减少 10 倍。对于大型项目而言,这种模式尤其有效。
- Raw AST transfer:允许 JavaScript 插件以最小的序列化开销访问 Rust 生成的 AST,从而弥合 Rust 内部和 JS 插件代码之间的性能差距。
- Native MagicString transforms:启用 custom transforms —— 逻辑层位于 JavaScript 中,字符串操作计算则在 Rust 中执行。
- Stabilizing the Environment API:正在努力使 Environment API 保持稳定。
安装大小
Vite 8 本身比 Vite 7 大约大 15 MB。这主要有两个原因:
- LightningCSS 大约 10 MB:LightningCSS 以前是一个可选的对等依赖项,现在是一个常规依赖项,可以提供更好的 CSS 开箱即用压缩功能。
- Rolldown 大约 5 MB:Rolldown 二进制文件比 esbuild + Rollup 更大,主要是因为性能优化优先考虑速度而不是二进制文件大小。
项目团队将继续监控并努力随着 Rolldown 的成熟而减小安装包大小。
此外,公告也对 Rollup 和 esbuild 进行了致谢:
随着 Vite 迁移到 Rolldown,我们想借此机会向促成 Vite 诞生的两个项目表达我们深深的感激之情。
自 Vite 诞生之初,Rollup 就一直是其生产环境的打包工具。其优雅的插件 API 设计精妙绝伦,以至于 Rolldown 也将其采纳,而 Vite 的整个插件生态系统正是建立在 Rollup 奠定的基础之上。Rollup 架构的卓越品质和周全考虑,塑造了 Vite 对可扩展性的思考方式。感谢 Rich Harris 创建了 Rollup,也感谢 Lukas Taegert-Atkinson 和 Rollup 团队的维护和发展,使其成为对 Web 工具生态系统产生深远影响的工具。
从 Vite 诞生之初,esbuild 就为其带来了惊人的开发速度:依赖项预打包、TypeScript 和 JSX 转换只需几毫秒即可完成,而以往需要数百秒。esbuild 证明了构建工具的速度可以提升几个数量级,其速度树立了标杆,启发了整整一代基于 Rust 和 Go 的工具。感谢 Evan Wallace,他向我们展示了无限可能。
如果没有这两个项目,Vite 就不会以今天的形式存在。即使我们正在推进 Rolldown 的发展,Rollup 和 esbuild 的影响也深深融入了 Vite 的基因之中,我们衷心感谢它们为生态系统所做的一切贡献。可以在我们的致谢页面了解更多关于 Vite 所依赖的所有项目和人员的信息。