Vite 8 Beta:由 Rolldown 驅動的 Vite
2025年12月3日

簡而言之:由 Rolldown 驅動的 Vite 8 首個測試版現已釋出。Vite 8 帶來了顯著更快的生產構建速度,並開啟了未來最佳化的可能性。你可以透過將 vite 升級到 8.0.0-beta.0 版本並閱讀 遷移指南 來試用此新版本。
我們很高興釋出 Vite 8 的首個測試版。此版本統一了底層工具鏈,在帶來顯著構建效能提升的同時,實現了更一致的行為。Vite 現在使用 Rolldown 作為其打包器,取代了之前 esbuild 和 Rollup 的組合。
面向 Web 的新一代打包器
Vite 此前依賴兩個打包器來滿足開發和生產構建的不同需求:
- 用於開發環境快速編譯的 esbuild
- 用於生產環境打包、程式碼拆分和最佳化的 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 和外掛鉤子不變。我們建立了一份 遷移指南 來幫助您升級。
有兩種可用的升級路徑:
- 直接升級: 更新
package.json中的vite,然後執行常規的開發和構建命令。 - 逐步遷移: 從 Vite 7 遷移到
rolldown-vite包,然後再遷移到 Vite 8。這使您可以孤立地識別與 Rolldown 相關的不相容性或問題,而不必更改 Vite 的其他部分。(推薦用於大型或複雜專案)
重要提示
如果您依賴特定的 Rollup 或 esbuild 選項,可能需要對 Vite 配置進行一些調整。請參閱 遷移指南 以獲取詳細說明和示例。與所有非穩定的大版本釋出一樣,建議在升級後進行徹底測試,以確保一切按預期工作。請務必報告任何 問題。
如果您使用的框架或工具(如 Astro、Nuxt 或 Vitest)將 Vite 作為依賴項,則需要覆蓋 package.json 中的 vite 依賴項,根據您的包管理器,操作方式略有不同。
{
"overrides": {
"vite": "8.0.0-beta.0"
}
}{
"resolutions": {
"vite": "8.0.0-beta.0"
}
}{
"pnpm": {
"overrides": {
"vite": "8.0.0-beta.0"
}
}
}{
"overrides": {
"vite": "8.0.0-beta.0"
}
}新增這些覆蓋配置後,請重新安裝依賴項,並像往常一樣啟動開發伺服器或構建專案。
Vite 8 的其他功能
除了整合 Rolldown 之外,Vite 8 還帶來了:
- 內建 tsconfig
paths支援: 開發者可以透過將resolve.tsconfigPaths設定為true來啟用此功能。此功能有一定的效能成本,因此預設未開啟。 emitDecoratorMetadata支援: Vite 8 現在內建了對 TypeScriptemitDecoratorMetadata選項 的自動支援。詳見 功能 頁面。
展望未來
速度一直是 Vite 的核心特徵。與 Rolldown 以及透過擴充套件與 Oxc 的整合,意味著 JavaScript 開發者將受益於 Rust 的速度。升級到 Vite 8 理應僅透過使用 Rust 就能獲得性能提升。
我們也很高興即將推出 Vite 的全量打包模式,它將極大提升大型專案的開發伺服器速度。初步結果顯示,開發伺服器啟動速度提升 3 倍,全量過載速度提升 40%,且網路請求減少 10 倍。
另一個標誌性的 Vite 特徵是其外掛生態系統。我們希望 JavaScript 開發者能夠在自己熟悉的 JavaScript 語言中繼續擴充套件和自定義 Vite,同時享受 Rust 帶來的效能紅利。我們的團隊正在與 VoidZero 團隊合作,以加速在這些基於 Rust 的系統中使用 JavaScript 外掛。
當前處於實驗階段的近期最佳化包括:
- 原始 AST 傳輸。允許 JavaScript 外掛以極小的開銷訪問 Rust 生成的 AST。
- 原生 MagicString 轉換。邏輯在 JavaScript 中編寫但計算在 Rust 中執行的簡單自定義轉換。
聯絡我們
如果您已經試用了 Vite 8 測試版,我們非常期待聽到您的反饋!請報告任何問題或分享您的體驗:
- Discord:加入我們的 社群伺服器 進行即時討論
- GitHub:在 GitHub Discussions 上分享反饋
- Issues:在 rolldown-vite 倉庫 報告錯誤和迴歸問題
- 成果:在 rolldown-vite-perf-wins 倉庫 分享您提升後的構建時間
我們感謝所有的報告和復現案例,它們將指引我們釋出穩定的 8.0.0 版本。
