跳轉到內容

Vite 8 Beta:由 Rolldown 驅動的 Vite

2025年12月3日

Vite 8 Beta Announcement Cover Image

簡而言之:由 Rolldown 驅動的 Vite 8 首個測試版現已釋出。Vite 8 帶來了顯著更快的生產構建速度,並開啟了未來最佳化的可能性。你可以透過將 vite 升級到 8.0.0-beta.0 版本並閱讀 遷移指南 來試用此新版本。


我們很高興釋出 Vite 8 的首個測試版。此版本統一了底層工具鏈,在帶來顯著構建效能提升的同時,實現了更一致的行為。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 開啟了更多高階功能,包括全量打包模式(Full bundle mode)、更靈活的程式碼拆分控制、模組級持久快取、模組聯邦(Module Federation)等。

統一工具鏈

Vite 更換打包器的影響遠不止效能提升。打包器依賴於解析器、解析器(resolver)、轉換器和壓縮器。Rolldown 使用由 VoidZero 領導的另一個專案 Oxc 來處理這些任務。

這使得 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%

接下來,我們為關鍵 Vite 外掛設定了針對 rolldown-vite 的測試套件。這一 CI 作業幫助我們儘早發現迴歸和相容性問題,特別是針對 SvelteKit、react-router 和 Storybook 等框架和元框架。

最後,我們構建了一個相容層,幫助開發者將 Rollup 和 esbuild 的配置項遷移到對應的 Rolldown 選項。

因此,每個人都可以平滑地遷移到 Vite 8。

遷移至 Vite 8 Beta

由於 Vite 8 觸及核心構建行為,我們致力於保持配置 API 和外掛鉤子不變。我們建立了一份 遷移指南 來幫助您升級。

有兩種可用的升級路徑:

  1. 直接升級: 更新 package.json 中的 vite,然後執行常規的開發和構建命令。
  2. 逐步遷移: 從 Vite 7 遷移到 rolldown-vite 包,然後再遷移到 Vite 8。這使您可以孤立地識別與 Rolldown 相關的不相容性或問題,而不必更改 Vite 的其他部分。(推薦用於大型或複雜專案)

重要提示

如果您依賴特定的 Rollup 或 esbuild 選項,可能需要對 Vite 配置進行一些調整。請參閱 遷移指南 以獲取詳細說明和示例。與所有非穩定的大版本釋出一樣,建議在升級後進行徹底測試,以確保一切按預期工作。請務必報告任何 問題

如果您使用的框架或工具(如 Astro、Nuxt 或 Vitest)將 Vite 作為依賴項,則需要覆蓋 package.json 中的 vite 依賴項,根據您的包管理器,操作方式略有不同。

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.tsconfigPaths 設定為 true 來啟用此功能。此功能有一定的效能成本,因此預設未開啟。
  • emitDecoratorMetadata 支援: Vite 8 現在內建了對 TypeScript emitDecoratorMetadata 選項 的自動支援。詳見 功能 頁面。

展望未來

速度一直是 Vite 的核心特徵。與 Rolldown 以及透過擴充套件與 Oxc 的整合,意味著 JavaScript 開發者將受益於 Rust 的速度。升級到 Vite 8 理應僅透過使用 Rust 就能獲得性能提升。

我們也很高興即將推出 Vite 的全量打包模式,它將極大提升大型專案的開發伺服器速度。初步結果顯示,開發伺服器啟動速度提升 3 倍,全量過載速度提升 40%,且網路請求減少 10 倍。

另一個標誌性的 Vite 特徵是其外掛生態系統。我們希望 JavaScript 開發者能夠在自己熟悉的 JavaScript 語言中繼續擴充套件和自定義 Vite,同時享受 Rust 帶來的效能紅利。我們的團隊正在與 VoidZero 團隊合作,以加速在這些基於 Rust 的系統中使用 JavaScript 外掛。

當前處於實驗階段的近期最佳化包括:

聯絡我們

如果您已經試用了 Vite 8 測試版,我們非常期待聽到您的反饋!請報告任何問題或分享您的體驗:

我們感謝所有的報告和復現案例,它們將指引我們釋出穩定的 8.0.0 版本。