Skip to content

Vite 8.0 发布了!

2026年3月12日

Vite 8 Announcement Cover Image

今天,我们很高兴地宣布 Vite 8 正式发布了!当 Vite 首次推出时,我们做出了一个务实的选择:在开发期间使用 esbuild 进行快速编译,而在生产构建中使用 Rollup 进行优化。这个选择多年来一直为我们服务。我们非常感谢 Rollup 和 esbuild 的维护者。没有他们,Vite 不可能成功。今天,它终于统一了:Vite 8 使用 Rolldown 作为其单一、统一、基于 Rust 的打包工具,提供高达 10-30 倍的构建速度,同时保持完整的插件兼容性。这是自 Vite 2 以来最重要的架构变化。

Vite 现在每周被下载 6500 万次,生态系统继续随着每个版本的增长而增长。为了帮助开发者导航不断扩展的插件生态系统,我们还推出了 registry.vite.dev,一个可搜索的插件目录,收集 Vite、Rolldown 和 Rollup 的插件数据,每日从 npm 收集。

快速链接:

可通过 vite.new 在线体验 Vite 8 或使用你喜欢的框架运行 pnpm create vite 搭建一个 Vite 应用。更多详情请参见 入门指南

我们邀请你帮助我们改进 Vite(加入超过 1.2K 贡献者到 Vite Core),我们的依赖,或插件和生态系统中的项目。更多详情请参见我们的 贡献指南。一个很好的开始方式是 分类问题审查 PR,基于开放问题发送测试 PR,并在 Discussions 或 Vite Land 的 帮助论坛 中支持其他人。如果你有任何问题,加入我们的 Discord 社区 并在 #contributing 频道 与我们交谈。

保持更新并与构建在 Vite 之上的其他人保持联系,通过在 BlueskyXMastodon 上关注我们。

由 Rolldown 驱动的 Vite

问题

Vite 最早的版本依赖于两个独立的打包工具来满足不同的需求。esbuild 在开发期间进行快速编译(依赖预打包和 TypeScript/JSX 转换),使得开发体验感觉非常即时。Rollup 处理生产构建、分块和优化,其丰富的插件 API 支撑了整个 Vite 插件生态系统。

这种双打包工具的方法为 Vite 服务了多年。它让我们能够专注于开发者体验和协调,而不是重新发明解析和打包。但它也带来了一些权衡。两个独立的转换管道意味着两个独立的插件系统,以及越来越多的粘合代码需要保持两个管道同步。不一致的模块处理边缘情况随着时间的推移积累起来,每个管道中的对齐修复都可能引入另一个管道中的不一致。

解决方案

Rolldown 是一个由 VoidZero 团队构建的基于 Rust 的打包工具,旨在直接解决这些挑战。它设计了三个目标:

  • 性能: 用 Rust 编写,Rolldown 运行速度与原生应用相当。在基准测试中,它比 Rollup 快 10-30 倍,与 esbuild 的性能水平相匹配。
  • 兼容性: Rolldown 支持与 Rollup 和 Vite 相同的插件 API。大多数现有的 Vite 插件在 Vite 8 中可以开箱即用。
  • 高级功能: 一个统一的打包工具解锁了双打包工具设置中难以或不可能的功能,包括全量打包模式、更灵活的分块拆分、模块级持久缓存和模块联邦支持。

走向稳定的旅程

Rolldown 的迁移是经过深思熟虑和社区驱动的。首先,一个单独的 rolldown-vite 包作为技术预览发布,允许早期采用者测试 Rolldown 的集成,而不会影响 Vite 的稳定版本。早期采用者的反馈非常有价值。他们通过各种规模和形状的真实项目代码库推动集成,发现了边缘情况和兼容性问题,我们可以在更广泛的发布前解决这些问题。我们还建立了一个专门的 CI 套件,验证关键的 Vite 插件和框架与新的打包工具的兼容性,早期发现回归问题并建立对迁移路径的信心。

在 2025 年 12 月,我们发布了 Vite 8 beta,Rolldown 完全集成。在 beta 阶段,Rolldown 本身从 beta 发展到发布候选版本,持续的改进由 Vite 社区的测试和反馈驱动。

实际项目中的性能

rolldown-vite 的预览和 beta 阶段,几家公司报告了生产构建时间的显著减少:

  • Linear: 生产构建时间从 46 秒减少到 6 秒
  • Ramp: 57% 构建时间减少
  • Mercedes-Benz.io: 高达 38% 的构建时间减少
  • Beehiiv: 64% 构建时间减少

对于大型项目,影响尤其明显,我们预计随着 Rolldown 的不断发展,还会有进一步的改进。

统一的工具链

在 Vite 8 中,Vite 成为了端到端工具链的入口,由密切合作的团队维护:构建工具(Vite)、打包工具(Rolldown)和编译器(Oxc)。这种一致性确保了整个技术栈的行为一致性,从解析到转换和压缩。它还意味着我们可以快速采用新的语言规范,因为 JavaScript 在不断发展。通过跨层集成,我们可以追求以前无法实现的各种优化,例如利用 Oxc 的语义分析来改进 Rolldown 中的 tree-shaking 操作。

对社区的感谢

如果没有更广泛的社区,这一切都不可能实现。我们想要向框架团队(SvelteKitReact RouterStorybookAstroNuxt 等)表示衷心的感谢,他们早期测试了 rolldown-vite,提交了详细的错误报告,并与我们合作解决兼容性问题。我们同样感激每一位尝试 beta 版的开发者,分享了他们的构建时间改进,并报告了帮助我们完善这个版本的各种粗糙边缘。你们在真实项目上测试迁移的意愿帮助我们使迁移到 Rolldown 变得更加平滑和可靠。

Node.js 版本要求

Vite 8 要求 Node.js 20.19+、22.12+,与 Vite 7 相同。这些范围确保 Node.js 默认支持 require(esm),而不需要通过 flags 启用,允许 Vite 作为 ESM-only 包分发。

新增功能

除了 Rolldown 集成之外,Vite 8 还包括几个值得注意的功能:

  • 内置 tsconfig paths 支持: 开发者可以通过将 resolve.tsconfigPaths 设置为 true 来启用 TypeScript 路径别名解析。这会有一些性能成本,并且默认未启用。

  • emitDecoratorMetadata 支持: Vite 8 现在内置了对 TypeScript emitDecoratorMetadata 选项 的自动支持,无需外部插件。更多详情请参见 功能 页面。

  • Wasm SSR 支持: .wasm?init 导入 现在能在 SSR 环境中工作,将 Vite 的 WebAssembly 功能扩展到服务器端渲染。

  • 浏览器控制台转发: Vite 8 可以将浏览器控制台日志和错误转发到开发服务器终端。这在使用 code agent 时特别有用,因为运行时客户端错误可以在 CLI 输出中可见。通过 server.forwardConsole 启用,当检测到 code agent 时会自动激活。

@vitejs/plugin-react v6

随着 Vite 8 的发布,我们发布了 @vitejs/plugin-react v6。插件使用 Oxc 进行 React Refresh 转换。Babel 不再是依赖项,安装体积更小。

对于需要 React Compiler 的项目,v6 提供了一个 reactCompilerPreset 助手,与 @rolldown/plugin-babel 配合使用,为你提供默认配置好的显式启用路径。

更多详情请参见 发布说明

请注意,v5 仍然与 Vite 8 兼容,因此你可以在升级 Vite 后升级插件。

展望未来

Rolldown 集成打开了改进和优化的大门。以下是我们接下来要做的:

  • 全打包模式 (实验性): 这个模式在开发期间捆绑模块,类似于生产构建。初步结果显示 3 倍更快的开发服务器启动,40% 更快的完全重新加载,以及 10 倍更少的网络请求。这对于大型项目来说尤其具有影响力,其中无捆绑的开发方法达到了扩展限制。

  • 原始抽象语法树传输: 允许 JavaScript 插件以最小的序列化开销访问 Rust 生成的 AST,弥合 Rust 内部和 JS 插件代码之间的性能差距。

  • 原生魔法字符串转换: 启用自定义转换,其中逻辑在 JavaScript 中,但字符串操作计算在 Rust 中运行。

  • 稳定环境 API: 我们正在努力使环境 API 稳定。生态系统已经开始定期会议,以更好地协作。

安装大小

我们想要透明地对待 Vite 安装大小的变化。Vite 8 本身比 Vite 7 大约大 15 MB。这来自两个主要来源:

  • ~10 MB 来自 lightningcss: 以前是一个可选的 peer 依赖项,lightningcss 现在是一个普通依赖项,提供更好的开箱即用的CSS 压缩。
  • ~5 MB 来自 Rolldown: Rolldown 二进制文件比 esbuild + Rollup 更大,主要是因为性能优化,更倾向于速度而不是二进制大小。

随着 Rolldown 逐渐成熟,我们将继续密切关注并努力减少安装大小。

迁移到 Vite 8

对于大多数项目,升级到 Vite 8 应该是一个顺利的过程。我们构建了一个兼容层,自动转换现有的 esbuildrollupOptions 到它们的 Rolldown 和 Oxc 等价配置,因此许多项目可以在没有配置更改的情况下工作。

对于较大或更复杂的项目,我们建议采用渐进迁移路径:首先从 Vite 7 切换到 rolldown-vite 包,以隔离任何 Rolldown 特定问题,然后升级到 Vite 8。这种方法可以轻松识别任何问题是否来自打包工具变化或其他 Vite 8 变化。

请在升级前仔细阅读 迁移指南。完整的变更列表在 Vite 8 变更日志 中。

对 Rollup 和 esbuild 的感谢

当 Vite 迁移到 Rolldown 时,我们想要花一点时间表达我们对两个项目深深的感激之情,正是它们让 Vite 成为可能。

Rollup 自始至终都是 Vite 的生产打包工具。它的优雅插件 API 设计如此精心构思,以至于 Rolldown 将其作为自己的设计,而 Vite 的整个插件生态系统正是因为 Rollup 奠定的基础而存在。Rollup 架构的质量和思考方式塑造了 Vite 对扩展性的思考。感谢 Rich Harris 创建 Rollup,以及 Lukas Taegert-Atkinson 和 Rollup 团队维护和推进它,使其对 Web 工具生态系统产生了如此深远的影响。

esbuild 从早期开始为 Vite 提供了令人惊叹的快速开发体验:依赖预打包、TypeScript 和 JSX 转换,完成时间以毫秒而不是数百毫秒。esbuild 证明了构建工具可以以数量级更快,它的速度设定了一个标杆,激励了一整代基于 Rust 和 Go 的工具。感谢 Evan Wallace,为我们展示了所有可能的东西。

如果没有这两个项目,Vite 今天就不会存在。即使我们继续使用 Rolldown,Rollup 和 esbuild 的影响也深深植根于 Vite 的 DNA 中,我们感激一切他们为生态系统所做的一切。你可以在我们的 致谢 页面了解更多关于 Vite 依赖的所有项目和人员。

致谢

Vite 8 由 sapphi-redVite 团队 领导,在贡献者、下游维护者和插件作者的广泛社区的帮助下。我们想要感谢 Rolldown 团队 在他们密切合作下使 Rolldown 驱动的 Vite 8 成为可能。我们特别感激每一位参与 rolldown-vite 预览和 Vite 8 beta 阶段的人。你们的测试、错误报告和反馈使 Rolldown 迁移成为可能,并塑造了这个我们引以为豪的版本。

Vite 由 VoidZero 提供,与 BoltNuxtLabs 合作。我们还要感谢我们在 Vite 的 GitHub SponsorsVite 的 Open Collective 的赞助商。