Bzlmod 會從 Bazel 註冊資料庫 (Bazel 模組的資料庫) 中要求其資訊,以找出依附元件。目前 Bzlmod 僅支援「索引註冊資料庫」,也就是採用特定格式的本機目錄或靜態 HTTP 伺服器。
索引註冊資料庫
索引註冊資料庫是本機目錄或靜態 HTTP 伺服器,包含模組清單的相關資訊,包括模組的首頁、維護器、每個版本的 MODULE.bazel
檔案,以及如何擷取每個版本的來源。值得注意的是,「不需要」提供來源封存。
索引註冊資料庫必須採用以下格式:
/bazel_registry.json
:含有登錄檔中繼資料的 JSON 檔案,例如:mirrors
:指定用於來源封存的鏡像清單module_base_path
:在source.json
檔案中指定local_repository
類型的模組基本路徑
/modules
:包含此註冊資料庫中每個模組的子目錄的目錄/modules/$MODULE
:包含此模組各個版本子目錄的目錄,以及:metadata.json
:包含模組相關資訊的 JSON 檔案,包含下列欄位:homepage
:專案的首頁網址maintainers
:JSON 物件清單,每個物件都會與登錄檔中模組維護者的資訊對應。請注意,此名稱不一定與專案的作者相同versions
:可在這個登錄檔中找到此模組的所有版本清單yanked_versions
:此模組的「yanked」版本對應。金鑰應為 yank 版本,而值應說明版本為何使用「受浪費」。最好包含查看詳細資訊的連結
/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"
。
- 透過以下欄位,您可以將類型變更為使用本機路徑 (代表
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
將其加回。