Bzlmod 會向 Bazel 登錄檔 (即 Bazel 模組的資料庫) 要求資訊,藉此發掘依附元件。目前 Bzlmod 僅支援索引註冊資料庫,也就是遵循特定格式的本機目錄或靜態 HTTP 伺服器。
索引登錄
索引註冊資料庫是本機目錄或靜態 HTTP 伺服器,內含模組清單的相關資訊,包括首頁、維護器、每個版本的 MODULE.bazel
檔案,以及如何擷取各個版本的來源。值得注意的是,這「不」需要提供來源封存檔。
索引登錄必須採用以下格式:
/bazel_registry.json
:JSON 檔案,內含註冊資料庫的中繼資料,例如:mirrors
:指定來源封存使用的鏡像清單。鏡像網址會與鏡像本身的串連,以及source.json
檔案所指定模組的來源網址,且會受限於通訊協定。舉例來說,如果模組的來源網址為https://foo.com/bar/baz
,而mirrors
包含["https://mirror1.com/", "https://example.com/mirror2/"]
,則 Bazel 會依序嘗試網址https://mirror1.com/foo.com/bar/baz
、https://example.com/mirror2/foo.com/bar/baz
,最後再到原始來源網址https://foo.com/bar/baz
。module_base_path
:在source.json
檔案中,為具有local_repository
類型的模組指定基本路徑
/modules
:這個目錄包含此登錄檔中每個模組的子目錄/modules/$MODULE
:這個目錄包含此模組每個版本的子目錄,以及:/modules/$MODULE/$VERSION
:包含下列檔案的目錄:MODULE.bazel
:此模組版本的MODULE.bazel
檔案source.json
:內含如何擷取這個模組版本來源相關資訊的 JSON 檔案- 預設類型為「Archive」(代表
http_archive
存放區),包含以下欄位:url
:來源封存檔的網址integrity
:封存的子資源完整性檢查碼strip_prefix
:擷取來源封存檔時要移除的目錄前置字串patches
:包含要套用至擷取封存的修補程式檔案的地圖。修補型檔案位於/modules/$MODULE/$VERSION/patches
目錄下。金鑰是修補檔案名稱,而值則是修補檔案的完整性檢查碼patch_strip
:與 Unixpatch
的--strip
引數相同。archive_type
:下載檔案的封存類型 (與http_archive
上的type
相同)。根據預設,封存類型取決於網址的副檔名。如果檔案沒有副檔名,您可以明確指定下列其中一項:"zip"
、"jar"
、"war"
、"aar"
、"tar"
、"tar.gz"
、"tgz"
、"tar.xz"
、"txz"
、"tar.zst"
、"tzst"
、tar.bz2
、"ar"
或"deb"
。
- 您可以變更類型以使用 Git 存放區,其中包含下列欄位:
type
:git_repository
- 下列欄位的說明如下:https://bazel.build/rules/lib/repo/git:
remote
commit
shallow_since
tag
init_submodules
verbose
strip_prefix
- 您可將類型變更為使用代表
local_repository
存放區的本機路徑,包含以下欄位:type
:local_path
path
:存放區的本機路徑,計算方式如下:- 如果
path
是絕對路徑,則保持不變 - 如果
path
是相對路徑,且module_base_path
是絕對路徑,則會解析為<module_base_path>/<path>
- 如果
path
和module_base_path
都是相對路徑,則會解析為<registry_path>/<module_base_path>/<path>
。註冊資料庫必須在本機託管,並由--registry=file://<registry_path>
使用。否則 Bazel 就會擲回錯誤
- 如果
- 預設類型為「Archive」(代表
patches/
:包含修補程式檔案的選用目錄,只有在source.json
具有「封存」類型時使用
Bazel Central Registry
位於 https://bcr.bazel.build/ 的 Bazel Central Registry (BCR) 是一個索引登錄檔,內含 GitHub 存放區 bazelbuild/bazel-central-registry
備份的內容。您可以使用位於 https://registry.bazel.build/ 的網路前端瀏覽其內容。
Bazel 社群負責維護 BCR,而貢獻者也歡迎提交提取要求。請參閱 BCR 貢獻指南。
除了遵循一般索引註冊資料庫的格式外,BCR 也需要每個模組版本 (/modules/$MODULE/$VERSION/presubmit.yml
) 的 presubmit.yml
檔案。這個檔案指定了一些重要的建構和測試目標,方便您用來檢查此模組版本是否有效。BCR 的 CI 管道也會利用這個機制來確保模組之間的互通性。
選取登錄檔
重複的 Bazel 旗標 --registry
可用來指定要求模組的登錄檔清單,以便設定專案,從第三方或內部註冊資料庫擷取依附元件。舊有的註冊資料庫會優先採用。為了方便起見,您可以在專案的 .bazelrc
檔案中列出 --registry
旗標的清單。
如果您的註冊資料庫由 GitHub 代管 (例如 bazelbuild/bazel-central-registry
的分支),則 --registry
值需要 raw.githubusercontent.com
下的原始 GitHub 位址。舉例來說,您可以在 my-org
分支的 main
分支上設定 --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/
。
使用 --registry
標記可停止預設使用 Bazel Central Registry,但您可以新增 --registry=https://bcr.bazel.build
將其加回。