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
:目錄,其中包含此模組的每個版本的子目錄,以及:metadata.json
:JSON 檔案,其中包含模組相關資訊,以及下列欄位:homepage
:專案首頁的網址maintainers
:JSON 物件清單,每個物件都對應至「註冊中心」中模組維護者的資訊。請注意,這不一定與專案的作者相同versions
:這個登錄檔中可找到的所有此模組版本清單yanked_versions
:這個模組已撤銷的版本對應表。鍵應為要撤銷的版本,值應為版本遭到撤銷的原因說明,最好包含連結,以便取得更多資訊
/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
為「archive」類型時才會使用
Bazel 中央登錄表
位於 https://bcr.bazel.build/ 的 Bazel 中央註冊中心 (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 中央註冊服務,但您可以新增 --registry=https://bcr.bazel.build
來重新使用。