Vite 8 帶來了自版本 2 以來最重大的架構變革。對於前端工程師來說,最核心的改變在於 Vite 徹底捨棄了過去的雙編譯器模式,全面轉向由 Rust 語言開發的統一編譯器 Rolldown。要理解這次更新的重要性,我們必須先回溯 Vite 之前的運作邏輯。
在 Vite 8 之前,Vite 採取了一種折衷方案:在開發環境(Development)使用 esbuild 來實現極速的模組編譯,而在生產環境(Production)則使用 Rollup 來進行高度優化的打包。雖然這種做法在當時解決了速度與品質的矛盾,但卻帶來了嚴重的維護成本。開發者必須面對兩套不同的轉換流水線(Transformation Pipelines)與兩套插件系統,這導致了大量的膠水代碼,且在處理模組邊緣案例時,經常出現開發環境與生產環境行為不一致的 Bug。
Rolldown 的出現解決了這個痛點。它是一個用 Rust 編寫的編譯器,旨在取代 esbuild 與 Rollup 的雙重角色。Rust 語言以記憶體安全與極高性能著稱,將編譯器底層由 JavaScript 遷移至 Rust,讓 Vite 8 在建置速度上取得了突破性進展。根據實務數據,生產環境的建置速度提升了 10 到 30 倍。例如,部分大型專案的生產建置時間從 46 秒縮短至 6 秒,甚至有百萬行代碼的專案將 12 分鐘的建置時間壓縮至 2 分鐘。
除了速度,Vite 8 依然維持了與現有 Vite 插件生態系統的 API 相容性,這意味著大多數專案可以幾乎無痛地完成升級。
在開發者體驗(DX)方面,Vite 8 引入了多項實用功能。首先是原生支持 tsconfig paths,開發者只需在配置中將 resolve.tsconfigPaths 設為 true,即可直接使用 TypeScript 的路徑別名,不再需要額外安裝路徑映射插件。其次,針對 NestJS 等依賴裝飾器元數據的框架,現在原生支持 emitDecoratorMetadata,簡化了配置流程。
另一個值得關注的是瀏覽器主控台轉發功能(server.forwardConsole)。該功能能將客戶端瀏覽器的 Log 直接同步輸出到開發終端機,這在目前 AI 輔助開發(AI Coding Agents)的趨勢下非常有用,因為 AI 可以直接從終端機讀取錯誤日誌而不需要切換視窗。此外,React 插件 v6 將 Babel 替換為 Oxc(另一個 Rust 驅動的 JavaScript 工具),進一步縮小了安裝體積並提升了 React Refresh 的轉換速度。
然而,升級過程中也存在限制。Vite 8 與 Yarn PnP(Plug'n'Play,一種旨在消除 node_modules 並加速安裝的模組解析策略)在 Windows 平台上有相容性問題。官方暗示未來可能不再積極支持 Yarn PnP,建議受影響的專案將 nodeLinker 切換回 node-modules 模式。
對比目前的競爭對手,Vite 8 採取了框架中立的策略。相比之下,Turbopack 深度綁定在 Next.js 生態中,而 Rspack 雖然同樣基於 Rust 且對 Webpack 有極強的相容性,但在插件生態的廣度上仍不及 Vite。
對於大型專案的遷移建議,工程團隊可以採取漸進式路徑:先在 Vite 7 版本中使用 rolldown-vite 套件來隔離並測試 Rolldown 的潛在問題,確認穩定後再正式升級至 Vite 8。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。