Lệnh sửa đổi

Báo cáo vấn đề Xem nguồn Hằng đêm · 7,3 · 7.2 · 7.1 · 7 · 6,5

Lệnh mod ra mắt trong Bazel 6.3.0 cung cấp một loạt công cụ để giúp bạn người dùng biết được biểu đồ phần phụ thuộc bên ngoài của họ khi Bzlmod được bật. Nó cho phép bạn trực quan hoá biểu đồ phần phụ thuộc, tìm hiểu lý do tại sao một mô-đun hoặc phiên bản của một mô-đun có trong biểu đồ, hãy xem bản hỗ trợ định nghĩa kho lưu trữ mô-đun, kiểm tra việc sử dụng tiện ích mô-đun và repos chúng tạo ra, trong đó các hàm khác.

Cú pháp

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

Các lệnh con có sẵn và đối số cần thiết tương ứng là:

  • graph: Hiển thị biểu đồ phần phụ thuộc đầy đủ của dự án, bắt đầu từ mô-đun gốc. Nếu một hoặc nhiều mô-đun được chỉ định trong --from, các mô-đun hiển thị ngay dưới thư mục gốc và biểu đồ chỉ được mở rộng bắt đầu từ họ (xem ví dụ).

  • deps <arg>...: Hiển thị các phần phụ thuộc trực tiếp đã được phân giải của mỗi mô-đun được chỉ định, tương tự như graph.

  • all_paths <arg>...: Hiển thị tất cả đường dẫn hiện có từ thư mục gốc đến thư mục gốc <arg>... được chỉ định. Nếu một hoặc nhiều mô-đun được chỉ định trong --from, những mô-đun này được hiển thị ngay dưới thư mục gốc và biểu đồ chứa bất kỳ mọi đường dẫn hiện có từ mô-đun --from đến các mô-đun đối số (xem ví dụ).

  • path <arg>...: Có cùng ngữ nghĩa như all_paths, nhưng chỉ hiển thị một đường dẫn đơn từ một trong các mô-đun --from đến một trong các mô-đun đối số.

  • explain <arg>...: Hiển thị tất cả vị trí mà các mô-đun được chỉ định xuất hiện trong biểu đồ phần phụ thuộc, cùng với các mô-đun phụ thuộc trực tiếp chúng. Kết quả của lệnh explain về cơ bản là phiên bản đã rút gọn của lệnh all_paths, chứa 1) mô-đun gốc; 2) Mô-đun gốc các phần phụ thuộc trực tiếp dẫn đến mô-đun đối số; 3) tranh luận mô-đun người phụ thuộc trực tiếp; và 4) chính các mô-đun đối số (xem ví dụ).

  • show_repo <arg>...: Hiển thị định nghĩa của các kho lưu trữ được chỉ định (xem phần ví dụ).

  • show_extension <extension>...: Hiện thông tin về từng các tiện ích mở rộng được chỉ định: danh sách các kho lưu trữ được tạo cùng với các mô-đun để nhập chúng bằng use_repo và danh sách cách sử dụng đoạn mã đó trong mỗi mô-đun sử dụng phần mở rộng đó, chứa và lệnh gọi use_repo (xem ví dụ).

<arg> tham chiếu đến một hoặc nhiều mô-đun hay kho lưu trữ. Đó có thể là một trong những trạng thái sau:

  • Chuỗi giá trị cố định <root>: Mô-đun gốc đại diện cho hiện tại của bạn dự án.

  • <name>@<version>: Mô-đun <name> ở phiên bản <version>. Đối với mô-đun có cơ chế ghi đè không phải sổ đăng ký, hãy sử dụng dấu gạch dưới (_) làm <version>.

  • <name>: Tất cả phiên bản hiện tại của mô-đun <name>.

  • @<repo_name>: Kho lưu trữ có rõ ràng đã cho name trong ngữ cảnh --base_module.

  • @@<repo_name>: Kho lưu trữ với trang chính tắc cụ thể tên.

Trong trường hợp yêu cầu chỉ định các mô-đun, các <arg> tham chiếu đến các kho lưu trữ tương ứng với các mô-đun (trái ngược với repos do tiện ích tạo) cũng có thể được đã sử dụng. Ngược lại, trong trường hợp yêu cầu chỉ định repos, các <arg> tham chiếu đến mô-đun có thể thay thế cho các kho lưu trữ tương ứng.

<extension> phải có dạng <arg><label_to_bzl_file>%<extension_name>. Phần <label_to_bzl_file> phải là nhãn tương đối lưu trữ (ví dụ: //pkg/path:file.bzl).

Các tuỳ chọn sau chỉ ảnh hưởng đến các lệnh con in biểu đồ (graph, deps, all_paths, pathexplain):

  • --from <arg>[,<arg>[,...]] mặc định: <root>: (Các) mô-đun mà từ đó biểu đồ được mở rộng trong graph, all_paths, pathexplain. Séc các lệnh con để biết thêm chi tiết.

  • --verbose default: "false": Đưa vào biểu đồ đầu ra thêm thông tin về độ phân giải phiên bản của từng mô-đun. Nếu mô-đun phiên bản đã thay đổi trong quá trình phân giải, hãy cho biết phiên bản nào đã thay thế phiên bản đó hoặc phiên bản gốc là gì, lý do thay thế và mô-đun nào đã yêu cầu phiên bản mới nếu lý do là Phiên bản tối thiểu Lựa chọn.

  • --include_unused default: "false": Đưa vào biểu đồ đầu ra những mô-đun ban đầu có trong biểu đồ phần phụ thuộc, nhưng đã trở thành không được sử dụng sau khi phân giải mô-đun.

  • --extension_info <mode>: Bao gồm thông tin về phần mở rộng mô-đun mức sử dụng dữ liệu như một phần của biểu đồ đầu ra (xem ví dụ). <mode> có thể là một trong những trạng thái sau:

    • hidden (mặc định): Không hiển thị bất kỳ nội dung nào về tiện ích.

    • usages: Hiển thị tiện ích trong mỗi mô-đun nơi chúng được sử dụng. Chúng được in dưới dạng $<extension>.

    • repos: Ngoài usages, hãy cho thấy repo được nhập bằng use_repo trong mỗi mức sử dụng tiện ích.

    • all: Ngoài usagesrepos, cũng hiển thị các kho lưu trữ do tiện ích tạo mà không được bất kỳ mô-đun nào nhập. Các các kho lưu trữ bổ sung sẽ hiển thị trong lần đầu tiên trong đầu ra và được kết nối với một cạnh chấm.

  • --extension_filter <extension>[,<extension>[,...]]: Nếu được chỉ định, biểu đồ đầu ra chỉ bao gồm các mô-đun sử dụng các phần mở rộng được chỉ định, và đường dẫn đến các mô-đun đó. Chỉ định một danh sách tiện ích trống (như trong --extension_filter=) tương đương với việc chỉ định tất cả tiện ích được sử dụng theo mô-đun bất kỳ trong biểu đồ phần phụ thuộc.

  • --depth <N>: Chiều sâu của biểu đồ đầu ra. Độ sâu bằng 1 chỉ hiển thị gốc và các phần phụ thuộc trực tiếp của nó. Giá trị mặc định là 1 cho explain, 2 cho deps và vô tận cho các giá trị khác.

  • --cycles default: "false": Bao gồm các cạnh chu kỳ trong biểu đồ đầu ra.

  • --include_builtin default: "false": Bao gồm các mô-đun tích hợp sẵn (chẳng hạn như @bazel_tools) trong biểu đồ đầu ra. Cờ này bị tắt theo mặc định, vì các mô-đun tích hợp sẵn ngầm phụ thuộc vào tất cả các mô-đun khác, điều này làm lộn xộn đầu ra rất nhiều.

  • --charset <charset> mặc định: utf8: Chỉ định bộ ký tự cần sử dụng cho văn bản đầu ra. Các giá trị hợp lệ là "utf8""ascii". Chỉ số quan trọng Sự khác biệt nằm ở các ký tự đặc biệt được dùng để vẽ biểu đồ Định dạng đầu ra "text" không tồn tại trong bộ ký tự "ascii". Do đó, bộ ký tự "ascii" cũng có sẵn để hỗ trợ việc sử dụng trên các nền tảng cũ không thể sử dụng Unicode.

  • --output <mode>: Bao gồm thông tin về cách sử dụng tiện ích mô-đun dưới dạng của biểu đồ đầu ra. <mode&gt; có thể là một trong những trạng thái sau:

    • text (mặc định): Biểu diễn đồ thị đầu ra mà con người có thể đọc được (được làm phẳng như một cái cây).

    • json: Xuất biểu đồ dưới dạng đối tượng JSON (được làm phẳng dưới dạng cây).

    • graph: Cho ra biểu đồ dưới dạng biểu diễn dấu chấm của Graphviz.

    bazel mod graph --output graph | dot -Tsvg > /tmp/graph.svg
    

Các lựa chọn khác bao gồm:

  • --base_module <arg> mặc định: <root>: Chỉ định một mô-đun tương ứng với tên kho lưu trữ rõ ràng nào trong các đối số sẽ được diễn giải. Lưu ý rằng đối số có thể ở dạng @<repo_name>; CANNOT TRANSLATE được diễn giải tương ứng với mô-đun gốc.

  • --extension_usages <arg>[,<arg>[,...]]: Lọc show_extension để chỉ hiển thị cách sử dụng tiện ích từ các mô-đun được chỉ định.

Ví dụ

Giới thiệu một số cách sử dụng lệnh mod trong một dự án Bazel thực tế bên dưới để cho bạn biết ý tưởng chung về cách bạn có thể sử dụng kỹ thuật này để kiểm tra các phần phụ thuộc bên ngoài.

Tệp 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")
Biểu đồ trước khi phân giải
Biểu đồ trước khi phân giải
Biểu đồ sau khi phân giải
Biểu đồ sau khi phân giải
  1. Hiển thị toàn bộ biểu đồ phần phụ thuộc của dự án.

    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. Hiển thị toàn bộ biểu đồ phần phụ thuộc (bao gồm mô-đun không sử dụng và có thêm thông tin về độ phân giải phiên bản).

    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. Hiển thị biểu đồ phần phụ thuộc được mở rộng từ một số mô-đun cụ thể.

    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. Hiển thị tất cả các đường dẫn giữa hai các mô-đun.

    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. Xem lý do và cách thức dự án của bạn phụ thuộc vào một số mô-đun.

    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. Xem quy tắc cơ bản của một số mô-đun kho lưu trữ.

    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. Xem tiện ích mô-đun nào được sử dụng trong biểu đồ phần phụ thuộc.

    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. Xem những kho lưu trữ nào được tạo và được nhập từ một số tiện ích cụ thể dưới dạng một phần của biểu đồ phần phụ thuộc.

    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. Xem danh sách các kho lưu trữ đã tạo của một tiện ích mở rộng và cách sử dụng tiện ích đó trong mỗi mô-đun.

    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. Xem quy tắc cơ bản của một số kho lưu trữ do tiện ích tạo.

    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>