為什麼 Bazel?

回報問題 查看來源 Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bazel 是快速正確可擴充的建構工具,具有整合式測試功能,支援多種語言存放區平台,是業界領先的生態系統

Bazel 速度很快

Bazel 確切知道每個建構指令需要哪些輸入檔案,因此只有在每次建構之間輸入檔案集有所變更時,才會重新執行,避免不必要的作業。這個工具會在同一部電腦或遠端建構節點中,盡可能以平行方式執行建構指令。如果建構結構允許,可以同時執行數千個建構或測試指令。

這項功能支援多個快取層,包括記憶體、磁碟和遠端建構伺服器 (如有)。Google 的快取命中率通常超過 99%。

Bazel 正確

Bazel 可確保二進位檔會從您自己的原始碼建構。Bazel 動作會在個別沙箱中執行,且 Bazel 會追蹤建構作業的每個輸入檔案,只會在需要時重新執行建構指令。這樣一來,二進位檔就會保持在最新狀態,確保相同的原始碼一律會產生相同的二進位檔 (以位元為單位)。

再也不用無止盡地叫用 make clean,也不用追查其實已在從未建構的原始碼中解決的虛幻錯誤。

Bazel 可擴充

編寫自己的規則和巨集,針對各種專案的特定需求自訂 Bazel,充分發揮 Bazel 的強大功能。

Bazel 規則是以 Starlark 編寫,這是我們內部使用的程式設計語言,屬於 Python 的子集。Starlark 可讓大多數開發人員輕鬆編寫規則,同時建立可在整個生態系統中使用的規則。

整合測試

Bazel 的整合式測試執行器只會知道並執行需要重新執行的測試,並使用遠端執行 (如有) 平行執行這些測試。使用遠端執行功能快速執行數千次測試,及早偵測到不穩定測試。

Bazel 提供工具,可將測試結果上傳至中央位置,方便有效率地傳達測試結果,無論是在 CI 或由個別開發人員進行測試。

支援多個語言

Bazel 支援許多常見的程式設計語言,包括 C++、Java、Kotlin、Python、Go 和 Rust。您可以在同一個 Bazel 呼叫中建構多個二進位檔 (例如後端、網頁 UI 和行動應用程式),而不必受限於單一語言的慣用建構工具。

支援多個存放區

Bazel 可以從多個位置收集原始碼:您不需要提供依附元件 (但可以!),而是將 Bazel 指向原始碼或預先建構的構件 (例如 Git 存放區或 Maven Central) 所在位置,其餘工作則由 Bazel 負責。

支援多平台

Bazel 可同時為多個平台建構專案,包括 Linux、macOS、Windows 和 Android。此外,它還提供強大的交叉編譯功能,可在一個平台上執行建構作業,同時為另一個平台建構程式碼。

廣泛的生態系統

業界領導者都愛用 Bazel,因此建立了一個龐大的開發人員社群,這些開發人員使用 Bazel 並為其貢獻心力。尋找工具、服務和說明文件,包括 Bazel 可使用的諮詢和 SaaS 產品。您可以在開放原始碼軟體存放區中,探索程式設計語言支援等擴充功能。