/'ɑrespæk/
,) 是一個用 Rust 撰寫的高效能 JavaScript 打包工具。它提供了強大的與 webpack 生態系的相容性,允許無縫替換 webpack,並提供閃電般的建置速度。
Rspack 最初是為了解決 ByteDance(一家維護許多具有複雜打包需求的大型單體應用程式專案的科技公司)遇到的效能問題而創建的。在某些情況下,生產建置時間已增加到十分鐘甚至半小時,而冷啟動時間可能會超過幾分鐘。在嘗試了許多打包工具和最佳化想法後,出現了一組常見的需求
npm run dev
是開發人員每小時可能會多次調用的命令。如果啟動時間超過 10-15 秒,工程生產力將會受到影響。npm run build
用於 CI/CD 管道,並直接影響合併生產力和應用程式交付時間。大型應用程式可能會花費 20-30 分鐘來執行這些管道,而打包時間通常是主要貢獻者。截至 2024 年 8 月,我們已發布 Rspack 1.0,我們現在認為它已可投入生產,因為它涵蓋了 webpack 的大多數 API 和功能。
Rspack 目前與社群中的幾乎所有 loader 相容。對於下載次數最多的 50 個 webpack 外掛,超過 80% 可以在 Rspack 中使用或有替代方案。
請參閱 Rspack 部落格,了解 Rspack 的最新更新。
雖然 Rspack 已經滿足許多專案的需求,但要達到 webpack 的全部功能仍然存在一些差距。優先順序將基於社群回饋,因此請告訴我們您的需求!
我們非常樂意為社群內的框架團隊和工具鏈提供支援,以釋放 Rspack 的真正效能優勢。如果您的框架或工具鏈對高效能建置引擎有需求,請告訴我們!
Rspack 已經實作了完整的 Loader
介面和大多數 webpack 外掛 API。雖然我們的目標不是實現外掛 API 的 100% 相容性,但我們將盡最大努力根據社群回饋來實作主流需求。同時,我們也在探索更高效能的外掛通訊解決方案,以降低外掛通訊的成本,從而確保可以實作更多的外掛 API。
效能是 Rspack 開發的核心賣點和重點。未來,我們將探索更高效能的並行/多核心友善演算法、更高效能的快取解決方案、更高效能的外掛通訊解決方案等。
目前,Rspack 主要使用 webpack 測試案例的子集進行測試。未來,我們將涵蓋更多這些測試,同時也擴展測試套件並納入社群專案,以確保 Rspack 版本之間的相容性。
webpack 可能是最成熟的現代打包工具,具有活躍的生態系統、靈活的設定和豐富的功能。
Rust 語言效率: webpack 的競爭對手經常基於效能來挑戰它,尤其是對於較大的專案。Rspack 使用 Rust 語言解決了這個問題,Rust 語言專門設計用於優先考慮效能,在速度和記憶體管理方面都名列前茅。Rust 還提供了許多編譯器保護措施,以避免其他原生語言(如 C++)的常見陷阱。
高度平行化的架構: webpack 受限於 JavaScript 對多執行緒的弱支援。相比之下,Rspack 的原生程式碼充分利用了現代多核心 CPU。
內建基本打包功能實作: webpack 的 hook 系統以其啟用了社群貢獻的大量 loader 和外掛而聞名。不幸的是,這些第三方套件經常導致效能瓶頸,可能是因為作者對 webpack 內部結構沒有深入了解,或者僅僅因為 hook 系統本質上限制了演算法的互動。Rspack 為關鍵功能提供內建外掛,以提高效能。
最佳化熱模組替換 (HMR): 無論您的專案有多大,確保 HMR 的良好體驗對於建置時間的要求甚至比一般的打包更高。Rspack 採用了專門的增量編譯策略來解決這個需求。
Vite 提供了良好的開發者體驗,但其在生產環境建置時對 Rollup 的依賴,面臨著與其他基於 JavaScript 演算法相似的效能成本。webpack 與 Rollup 之間的取捨也同樣適用,例如缺少 optimization.splitChunks 功能的彈性。
esbuild 透過在 Golang 中實作幾乎所有操作(除了某些 JavaScript 外掛)來實現非常好的效能。然而,esbuild 的功能集不如 webpack 完整,例如缺少 HMR 和 optimization.splitChunks 功能。
Turbopack 和 Rspack 一樣是用 Rust 實作的,但 Turbopack 從頭開始使用重新設計的架構和配置。這帶來了一些好處,但對於依賴 webpack 及其廣泛生態系統的專案來說,遷移成本較高。
Rspack 和 Rollup 都是打包工具,但它們專注於不同的領域。Rollup 更適合用於打包函式庫,而 Rspack 更適合用於打包應用程式。因此,Rspack 針對打包應用程式優化了許多功能,例如 HMR 和 Bundle splitting。Rollup 生產的 ESM 輸出比 Rspack 對函式庫更友善。社群中也有許多工具在某種程度上封裝了 Rollup,並為打包應用程式提供更友善的支援,例如 vite 和 wmr。目前,Rspack 的生產環境建置效能比 rollup 更好。
Rspack 的整體架構與 Parcel 有許多相似之處。例如,兩者都將 CSS 資源視為一等公民,並且都支援基於過濾器的轉換器。然而,Parcel 更注重開箱即用的可用性,而 Rspack 更注重為更高等級的框架和工具提供靈活的配置。Parcel 創新地設計了諸如 Unified Graph 和將 HTML 作為一等公民的功能。Rspack 也計劃在未來支援這些功能。
請閱讀快速開始以開始使用 Rspack。
歡迎加入 GitHub Discussions 和 Discord 與我們交流。