mod 指令

回報問題 查看原始碼 。 。 。 。 夜間。 。 7.3 。 。 7.2 。 。 7.1 。 。 7.0 。 。 6.5

Bazel 6.3.0 中導入的 mod 指令提供了一系列工具, 啟用 Bzlmod 時,使用者會瞭解外部依附元件圖表。這項服務 可讓您以視覺化方式呈現依附元件圖表,瞭解特定模組或 模組中會顯示模組版本,請查看支援資料庫的存放區定義。 以及檢查模組擴充功能和其產生的存放區的使用情形 其他函式。

語法

bazel mod <subcommand> [<options>] [<arg> [<arg>...]]

可用的子指令及其各自的必要引數如下:

  • graph:顯示專案的完整依附元件圖表,從 根層級模組如果在 --from 中指定一或多個模組,則這些模組 模組直接顯示在根層級下,而且圖表只會展開 從頭開始 (請參閱範例)。

  • deps <arg>...:顯示各個 Pod 的解析直接依附元件 與 graph 類似

  • all_paths <arg>...:顯示從根目錄到 指定的是<arg>...。如果在 --from 中指定一或多個模組, 這些模組會直接顯示在根層級下,而圖表中包含任何 從 --from 模組到引數模組的任何現有路徑 (請參閱 example)。

  • path <arg>...:與 all_paths 的語意相同,但只顯示一個 從其中一個 --from 模組到其中一個引數模組的單一路徑。

  • explain <arg>...:顯示指定模組的所有位置 以及直接依附於 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件explain 指令的輸出內容基本上是經過剪輯的 all_paths 指令,其中含有 1) 根模組;2) 根模組的 導向引數模組的直接依附元件;3) 引數 模組直接附屬機構;和 4) 引數模組本身 (請見範例)。

  • show_repo <arg>...:顯示特定存放區的定義 (請參閱 example)。

  • show_extension <extension>...:顯示每個 指定的擴充功能:產生的存放區清單以及模組 使用 use_repo 匯入這些函式,以及 會套用每個所用模組的 標記和 use_repo 呼叫 (請參閱範例)。

<arg> 是指一或多個模組或存放區。可以是下列其中一項:

  • 常值字串 <root>:代表目前資料的根模組 專案。

  • <name>@<version><name> 版的模組 <version>。模組 並使用底線 (_) 做為 <version>

  • <name>:模組 <name> 的所有現存版本。

  • @<repo_name>:包含指定 apparent 的存放區 將其命名為 --base_module

  • @@<repo_name>:含有指定 standard name 中的值。

在需要指定模組的環境中,<arg> 是指會 各個模組 (擴充功能產生的存放區) 也可以 相反地,在要求指定存放區的情況下,<arg> 是指 模組可放置於對應的存放區。

<extension> 的格式必須為 <arg><label_to_bzl_file>%<extension_name><label_to_bzl_file> 部分必須是存放區相關標籤 (例如 //pkg/path:file.bzl)。

下列選項只會影響輸出圖表的子指令 (graphdepsall_pathspathexplain):

  • --from <arg>[,<arg>[,...]] 預設:<root>:來源模組 圖表已在 graphall_pathspathexplain 中展開。確認 子指令的說明。

  • --verbose default: "false":包含在輸出圖表額外項目中 各模組版本解析的資訊。如果模組 版本變更時,請顯示替代版本,或 原始版本、取代原因以及模組 如果理由是最小版本,則要求新版本 選項

  • --include_unused default: "false":在輸出圖表中加入 原本出現在依附關係圖中的模組,但後來變成 未使用的模組。

  • --extension_info <mode>:包含模組擴充功能的相關資訊 (請參閱範例)。<mode> 可以是下列任一值:

    • hidden (預設):不顯示任何擴充功能相關資訊。

    • usages:在每個使用這些模組的模組下方顯示擴充功能。他們 會以 $<extension> 的形式列印。

    • repos:除了 usages 以外,顯示使用以下方式匯入的存放區: use_repo

    • all:除了 usagesrepos 以外,也顯示 並非由任何模組匯入的擴充功能產生的存放區。這些 額外存放區會顯示在第一次產生的存放區下方 而且已透過虛線邊緣連結

  • --extension_filter <extension>[,<extension>[,...]]:如有指定,系統會 輸出圖表只包含使用指定擴充功能的模組,以及 通往這些模組的路徑指定空白的擴充功能清單 ( 在 --extension_filter= 中) 等同於指定「所有」使用的副檔名 套用至依附元件圖中的任何模組。

  • --depth <N>:輸出圖表的深度。厚度 1 則只會顯示 及其直接依附元件explain 預設為 1,deps 預設為 2 對其他筆下

  • --cycles default: "false":在輸出圖表中加入循環邊緣。

  • --include_builtin default: "false":包含內建模組 (例如 @bazel_tools)。這個標記預設為停用狀態,因為 內建模組間接依附於其他所有模組 因此輸出內容會大打折扣。

  • --charset <charset> default: utf8:指定要用於文字的字元集 輸出內容有效值為 "utf8""ascii"。這裡是 計算差異在於 "text" 輸出格式,不適用於 "ascii" 字元集。 因此,建議使用 "ascii" 字元集,一併支援 無法使用 Unicode 的舊版平台。

  • --output <mode>:加入模組擴充功能使用情形的相關資訊,做為 一部分<mode&gt;可以是下列任一值:

    • text (預設):使用者可理解的輸出圖表表示法 (整併成樹)。

    • json:以 JSON 物件的形式輸出圖表 (整併為 樹狀結構)。

    • graph:輸出 Graphviz 表示法的圖表。

    ,瞭解如何調查及移除這項存取權。
    bazel mod graph --output graph | dot -Tsvg > /tmp/graph.svg
    

您也可以採取以下做法:

  • --base_module <arg> 預設:<root>:指定相對於 系統會解譯引數中的這類存放區名稱請注意,此 引數本身可以是 @<repo_name> 的格式;一定會 每個物件都會根據根模組進行轉譯

  • --extension_usages <arg>[,<arg>[,...]]:將show_extension篩選器設為僅限 顯示來自指定模組的擴充功能使用資訊。

範例

這裡展示了在實際 Bazel 專案中使用 mod 指令的部分可能用途 以下概要說明,可用來檢查專案的 外部依附元件

MODULE.bazel 檔案:

module(
  name = "my_project",
  version = "1.0",
)

bazel_dep(name = "bazel_skylib", version = "1.1.1", repo_name = "skylib1")
bazel_dep(name = "bazel_skylib", version = "1.2.0", repo_name = "skylib2")
multiple_version_override(module_name = "bazel_skylib", versions = ["1.1.1", "1.2.0"])

bazel_dep(name = "stardoc", version = "0.5.0")
bazel_dep(name = "rules_java", version = "5.0.0")

toolchains = use_extension("@rules_java//java:extensions.bzl", "toolchains")
use_repo(toolchains, my_jdk="remotejdk17_linux")
解析度前的圖形
解析度前的圖形
解析度後的圖形
解析度後的圖表
  1. 顯示完整的依附元件圖表 專案。

    bazel mod graph
    
    <root> (my_project@1.0)
    ├───bazel_skylib@1.1.1
    │   └───platforms@0.0.4
    ├───bazel_skylib@1.2.0
    │   └───platforms@0.0.4 ...
    ├───rules_java@5.0.0
    │   ├───platforms@0.0.4 ...
    │   ├───rules_cc@0.0.1
    │   │   ├───bazel_skylib@1.1.1 ...
    │   │   └───platforms@0.0.4 ...
    │   └───rules_proto@4.0.0
    │       ├───bazel_skylib@1.1.1 ...
    │       └───rules_cc@0.0.1 ...
    └───stardoc@0.5.0
        ├───bazel_skylib@1.1.1 ...
        └───rules_java@5.0.0 ...
    
  2. 顯示完整的依附元件圖表 (包括 未使用的模組以及版本解析度的額外資訊)。

    bazel mod graph --include_unused --verbose
    
    <root> (my_project@1.0)
    ├───bazel_skylib@1.1.1
    │   └───platforms@0.0.4
    ├───bazel_skylib@1.2.0
    │   └───platforms@0.0.4 ...
    ├───rules_java@5.0.0
    │   ├───platforms@0.0.4 ...
    │   ├───rules_cc@0.0.1
    │   │   ├───bazel_skylib@1.0.3 ... (to 1.1.1, cause multiple_version_override)
    │   │   ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
    │   │   └───platforms@0.0.4 ...
    │   └───rules_proto@4.0.0
    │       ├───bazel_skylib@1.0.3 ... (to 1.1.1, cause multiple_version_override)
    │       ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
    │       └───rules_cc@0.0.1 ...
    └───stardoc@0.5.0
        ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
        ├───rules_java@5.0.0 ... (was 4.0.0, cause <root>, bazel_tools@_)
        ├───bazel_skylib@1.0.3 (to 1.1.1, cause multiple_version_override)
        │   └───platforms@0.0.4 ...
        └───rules_java@4.0.0 (to 5.0.0, cause <root>, bazel_tools@_)
            ├───bazel_skylib@1.0.3 ... (to 1.1.1, cause multiple_version_override)
            └───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
    
  3. 顯示從以下位置展開的依附元件圖表: 幾個特定模組

    bazel mod graph --from rules_java --include_unused
    
    <root> (my_project@1.0)
    ├───rules_java@5.0.0
    │   ├───platforms@0.0.4
    │   ├───rules_cc@0.0.1
    │   │   ├───bazel_skylib@1.0.3 ... (unused)
    │   │   ├───bazel_skylib@1.1.1 ...
    │   │   └───platforms@0.0.4 ...
    │   └───rules_proto@4.0.0
    │       ├───bazel_skylib@1.0.3 ... (unused)
    │       ├───bazel_skylib@1.1.1 ...
    │       └───rules_cc@0.0.1 ...
    └╌╌rules_java@4.0.0 (unused)
        ├───bazel_skylib@1.0.3 (unused)
        │   └───platforms@0.0.4 ...
        └───bazel_skylib@1.1.1
            └───platforms@0.0.4 ...
    
  4. 顯示兩個兩個頻道 模組。

    bazel mod all_paths bazel_skylib@1.1.1 --from rules_proto
    
    <root> (my_project@1.0)
    └╌╌rules_proto@4.0.0
        ├───bazel_skylib@1.1.1
        └───rules_cc@0.0.1
            └───bazel_skylib@1.1.1 ...
    
  5. 瞭解專案為何需要仰賴 模組)。

    bazel mod explain @skylib1 --verbose --include_unused
    
    <root> (my_project@1.0)
    ├───bazel_skylib@1.1.1
    ├───rules_java@5.0.0
    │   ├───rules_cc@0.0.1
    │   │   └───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
    │   └───rules_proto@4.0.0
    │       ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
    │       └───rules_cc@0.0.1 ...
    └───stardoc@0.5.0
        ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
        ├╌╌rules_cc@0.0.1
        │   └───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
        └╌╌rules_proto@4.0.0
            ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
            └───rules_cc@0.0.1 ...
    
  6. 查看部分模組的基本規則 來使用容器映像檔

    bazel mod show_repo rules_cc stardoc
    
    ## rules_cc@0.0.1:
    # <builtin>
    http_archive(
      name = "rules_cc~0.0.1",
      urls = ["https://bcr.bazel.build/test-mirror/github.com/bazelbuild/rules_cc/releases/download/0.0.1/rules_cc-0.0.1.tar.gz", "https://github.com/bazelbuild/rules_cc/releases/download/0.0.1/rules_cc-0.0.1.tar.gz"],
      integrity = "sha256-Tcy/0iwN7xZMj0dFi9UODHFI89kgAs20WcKpamhJgkE=",
      strip_prefix = "",
      remote_patches = {"https://bcr.bazel.build/modules/rules_cc/0.0.1/patches/add_module_extension.patch": "sha256-g3+zmGs0YT2HKOVevZpN0Jet89Ylw90Cp9XsIAY8QqU="},
      remote_patch_strip = 1,
    )
    # Rule http_archive defined at (most recent call last):
    #   /home/user/.cache/bazel/_bazel_user/6e893e0f5a92cc4cf5909a6e4b2770f9/external/bazel_tools/tools/build_defs/repo/http.bzl:355:31 in <toplevel>
    
    ## stardoc:
    # <builtin>
    http_archive(
      name = "stardoc~0.5.0",
      urls = ["https://bcr.bazel.build/test-mirror/github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz", "https://github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz"],
      integrity = "sha256-yXlNzIAmow/2fPfPkeviRcopSyCwcYRdEsGSr+JDrXI=",
      strip_prefix = "",
      remote_patches = {},
      remote_patch_strip = 0,
    )
    # Rule http_archive defined at (most recent call last):
    #   /home/user/.cache/bazel/_bazel_user/6e893e0f5a92cc4cf5909a6e4b2770f9/external/bazel_tools/tools/build_defs/repo/http.bzl:355:31 in <toplevel>
    
  7. 查看您在廣告中使用哪些模組擴充功能 依附關係圖

    bazel mod graph --extension_info=usages --extension_filter=all
    
    <root> (my_project@1.0)
    ├───$@@rules_java.5.0.0//java:extensions.bzl%toolchains
    ├───rules_java@5.0.0 #
    │   ├───$@@rules_java.5.0.0//java:extensions.bzl%toolchains
    │   ├───rules_cc@0.0.1 #
    │   │   └───$@@rules_cc.0.0.1//bzlmod:extensions.bzl%cc_configure
    │   └───rules_proto@4.0.0
    │       └───rules_cc@0.0.1 ...
    └───stardoc@0.5.0
        └───rules_java@5.0.0 ...
    
  8. 查看系統產生的存放區和 從特定擴充功能匯入,做為依附元件圖的一部分。

    bazel mod show_extension @@rules_java~5.0.0//java:extensions.bzl%toolchains
    
    <root> (my_project@1.0)
    ├───$@@rules_java.5.0.0//java:extensions.bzl%toolchains
    │   ├───remotejdk17_linux
    │   ├╌╌remotejdk11_linux
    │   ├╌╌remotejdk11_linux_aarch64
    │   ├╌╌remotejdk11_linux_ppc64le
    │   ├╌╌remotejdk11_linux_s390x
    ...(some lines omitted)...
    ├───rules_java@5.0.0 #
    │   └───$@@rules_java.5.0.0//java:extensions.bzl%toolchains ...
    │       ├───local_jdk
    │       ├───remote_java_tools
    │       ├───remote_java_tools_darwin
    │       ├───remote_java_tools_linux
    │       ├───remote_java_tools_windows
    │       ├───remotejdk11_linux_aarch64_toolchain_config_repo
    │       ├───remotejdk11_linux_ppc64le_toolchain_config_repo
    ...(some lines omitted)...
    └───stardoc@0.5.0
        └───rules_java@5.0.0 ...
    
  9. 查看系統產生的 以及該擴充功能在各模組中的用法。

    bazel mod graph --extension_info=all --extension_filter=@rules_java//java:extensions.bzl%toolchains
    
    ## @@rules_java.5.0.0//java:extensions.bzl%toolchains:
    
    Fetched repositories:
      -   local_jdk (imported by bazel_tools@_, rules_java@5.0.0)
      -   remote_java_tools (imported by bazel_tools@_, rules_java@5.0.0)
      -   remote_java_tools_darwin (imported by bazel_tools@_, rules_java@5.0.0)
      -   remote_java_tools_linux (imported by bazel_tools@_, rules_java@5.0.0)
      -   remote_java_tools_windows (imported by bazel_tools@_, rules_java@5.0.0)
      -   remotejdk11_linux_aarch64_toolchain_config_repo (imported by rules_java@5.0.0)
      -   remotejdk11_linux_ppc64le_toolchain_config_repo (imported by rules_java@5.0.0)
    ...(some lines omitted)...
      -   remotejdk17_linux (imported by <root>)
      -   remotejdk11_linux
      -   remotejdk11_linux_aarch64
      -   remotejdk11_linux_ppc64le
      -   remotejdk11_linux_s390x
      -   remotejdk11_macos
    ...(some lines omitted)...
    
    # Usage in <root> at <root>/MODULE.bazel:14:27 with the specified attributes:
    use_repo(
      toolchains,
      my_jdk="remotejdk17_linux",
    )
    
    # Usage in bazel_tools@_ at bazel_tools@_/MODULE.bazel:23:32 with the specified attributes:
    use_repo(
      toolchains,
      "local_jdk",
      "remote_java_tools",
      "remote_java_tools_linux",
      "remote_java_tools_windows",
      "remote_java_tools_darwin",
    )
    
    # Usage in rules_java@5.0.0 at rules_java@5.0.0/MODULE.bazel:30:27 with the specified attributes:
    use_repo(
      toolchains,
      "remote_java_tools",
      "remote_java_tools_linux",
      "remote_java_tools_windows",
      "remote_java_tools_darwin",
      "local_jdk",
      "remotejdk11_linux_toolchain_config_repo",
      "remotejdk11_macos_toolchain_config_repo",
      "remotejdk11_macos_aarch64_toolchain_config_repo",
      ...(some lines omitted)...
    )
    
  10. 查看 由擴充功能產生的存放區

    bazel mod show_repo --base_module=rules_java @remote_java_tools
    
    ## @remote_java_tools:
    # <builtin>
    http_archive(
      name = "rules_java~5.0.0~toolchains~remote_java_tools",
      urls = ["https://mirror.bazel.build/bazel_java_tools/releases/java/v11.5/java_tools-v11.5.zip", "https://github.com/bazelbuild/java_tools/releases/download/java_v11.5/java_tools-v11.5.zip"],
      sha256 = "b763ee80e5754e593fd6d5be6d7343f905bc8b73d661d36d842b024ca11b6793",
    )
    # Rule http_archive defined at (most recent call last):
    #   /home/user/.cache/bazel/_bazel_user/6e893e0f5a92cc4cf5909a6e4b2770f9/external/bazel_tools/tools/build_defs/repo/http.bzl:355:31 in <toplevel>