知海

Vite 8 Beta 发布公告

vite-main发布与更新日志

Vite 8 Beta:Rolldown 驱动的 Vite

2025 年 12 月 3 日

Vite 8 Beta 公告封面图

核心摘要:由 Rolldown 驱动的 Vite 8 首个 Beta 版本现已发布。Vite 8 显著提升了生产构建速度,并解锁了未来更多的优化可能。您可以通过将 vite 升级至 8.0.0-beta.0,并参考迁移指南来体验这一新版本。


我们很高兴地宣布,Vite 8 的首个 Beta 版本正式发布。此版本统一了底层工具链,带来了更一致的行为,同时实现了显著的构建性能提升。Vite 现在使用 Rolldown 作为其打包器,取代了此前结合使用 esbuild 和 Rollup 的方案。

面向 Web 的全新打包器

Vite 之前依赖两个打包器来满足开发与生产构建的不同需求:

  1. esbuild:用于开发过程中的快速编译。
  2. Rollup:用于生产构建的打包、代码分割与优化。

这种方法让 Vite 得以专注于开发者体验与流程编排,而不必重新研发解析和打包逻辑。然而,维护两条独立的打包流水线也带来了一些问题:两套不同的转换流程、不同的插件系统,以及为了保持开发与生产构建行为一致而日益增加的胶水代码。

为了解决这个问题,VoidZero 团队 构建了 Rolldown——一个旨在用于 Vite 的下一代打包器。其设计目标包括:

  • 性能:Rolldown 使用 Rust 编写,以原生速度运行。其性能与 esbuild 相当,并且比 Rollup 快 10–30 倍
  • 兼容性:Rolldown 支持与 Rollup 和 Vite 相同的插件 API。大多数 Vite 插件可以开箱即用地在 Vite 8 中工作。
  • 更多特性:Rolldown 为 Vite 解锁了更多高级功能,包括完整的 bundle 模式、更灵活的分包控制、模块级持久化缓存、Module Federation 等。

统一工具链

Vite 更换打包器的影响远不止性能。打包器依赖解析器、解析器(Resolver)、转换器和压缩器来实现其功能。Rolldown 在这些方面使用了 Oxc——另一个由 VoidZero 主导的项目。

这使得 Vite 成为了一个由同一团队维护的端到端工具链的入口:构建工具(Vite)、打包器(Rolldown)和编译器(Oxc)。

这种统一确保了整个技术栈行为的一致性,并使我们能够随着 JavaScript 的持续演进,快速采用和适配新的语言规范。这也解锁了 Vite 此前无法单独实现的广泛改进。例如,我们可以利用 Oxc 的语义分析在 Rolldown 中实现更好的 tree-shaking。

Vite 如何迁移到 Rolldown

迁移到 Rolldown 驱动的 Vite 是一项基础性变革。因此,我们的团队采取了审慎的步骤来实施,以确保不牺牲稳定性或生态系统兼容性。

首先,我们发布了独立的 rolldown-vite 包作为技术预览版。这使得我们能够在不影响 Vite 稳定版本的情况下,与早期采用者合作。早期采用者受益于 Rolldown 的性能提升,并提供了宝贵的反馈。部分亮点:

  • Linear 的生产构建时间从 46 秒减少到 6 秒。
  • Ramp 的构建时间减少了 57%。
  • Mercedes-Benz.io 的构建时间缩短了最多 38%。
  • Beehiiv 的构建时间减少了 64%。

接着,我们建立了一套测试套件,用于针对 rolldown-vite 验证关键的 Vite 插件。这个 CI 任务帮助我们尽早发现回归和兼容性问题,尤其是针对 SvelteKit、react-router 和 Storybook 等框架和元框架。

最后,我们构建了一个兼容层,帮助开发者从 Rollup 和 esbuild 的配置选项迁移到对应的 Rolldown 选项。

因此,对于所有用户而言,迁移到 Vite 8 的路径都是平滑的。

迁移到 Vite 8 Beta

由于 Vite 8 触及了核心构建行为,我们将重点放在保持配置 API 和插件钩子不变上。我们创建了一份迁移指南来帮助您升级。

有两种可用的升级路径:

  1. 直接升级:更新 package.json 中的 vite 版本,然后运行常规的 dev 和 build 命令。
  2. 渐进式迁移:先从 Vite 7 迁移到 rolldown-vite 包,然后再迁移到 Vite 8。这可以帮助您在不涉及 Vite 其他更改的情况下,识别出与 Rolldown 相关的兼容性问题(对于大型或复杂项目,推荐使用此方式)。

[!IMPORTANT]
如果您依赖特定的 Rollup 或 esbuild 选项,可能需要调整您的 Vite 配置。请参阅迁移指南获取详细说明和示例。
与所有非稳定主版本一样,建议在升级后进行彻底测试,以确保一切按预期工作。请务必报告您遇到的任何问题

如果您使用将 Vite 作为依赖的框架或工具,例如 Astro、Nuxt 或 Vitest,您需要在 package.json 中覆盖 vite 依赖,具体方法因包管理器而异:

code-group

json 复制代码
{
  "overrides": {
    "vite": "8.0.0-beta.0"
  }
}
json 复制代码
{
  "resolutions": {
    "vite": "8.0.0-beta.0"
  }
}
json 复制代码
{
  "pnpm": {
    "overrides": {
      "vite": "8.0.0-beta.0"
    }
  }
}
json 复制代码
{
  "overrides": {
    "vite": "8.0.0-beta.0"
  }
}

添加这些覆盖配置后,重新安装依赖并照常启动开发服务器或构建项目。

Vite 8 的其他功能

除了搭载 Rolldown 之外,Vite 8 还带来:

  • 内置的 tsconfig paths 支持:开发者可以通过设置 resolve.tsconfigPathstrue 来启用。此功能有轻微的性能开销,因此默认不开启。
  • emitDecoratorMetadata 支持:Vite 8 现在内置了对 TypeScript 的 emitDecoratorMetadata 选项 的自动支持。更多详情请参见功能页面。

展望未来

速度一直是 Vite 的标志性特性。与 Rolldown(以及 Oxc)的集成意味着 JavaScript 开发者将从 Rust 的速度中受益。升级到 Vite 8 应该就能通过使用 Rust 获得性能提升。

我们也很兴奋地宣布,Vite 的完整 Bundle 模式(Full Bundle Mode)即将推出,这将大幅提升大型项目的开发服务器速度。初步结果显示,开发服务器启动速度提升 3 倍,完整重载速度快 40%,网络请求减少 10 倍。

Vite 的另一个标志性特性是其插件生态系统。我们希望 JavaScript 开发者能够继续使用他们熟悉的 JavaScript 语言来扩展和定制 Vite,同时享受到 Rust 带来的性能提升。我们的团队正在与 VoidZero 团队合作,以加速这些基于 Rust 系统中的 JavaScript 插件用法。

目前处于实验阶段的后续优化包括:

联系我们

如果您已尝试过 Vite 8 Beta,我们期待您的反馈!请报告任何问题或分享您的经验:

我们感谢所有的报告和复现案例,它们将帮助我们向发布稳定的 8.0.0 版本迈进。

帮助我们改进文档

发现翻译问题或内容错误?请告诉我们。