Lệnh mod cung cấp một loạt công cụ giúp người dùng hiểu biểu đồ phần phụ thuộc bên ngoài của họ. Lệnh này cho phép bạn hình dung biểu đồ phần phụ thuộc, tìm hiểu
lý do một mô-đun hoặc phiên bản mô-đun nhất định xuất hiện trong biểu đồ, xem các
định nghĩa kho lưu trữ hỗ trợ mô-đun, kiểm tra việc sử dụng các tiện ích và kho lưu trữ của mô-đun
mà chúng tạo, cùng với các hàm khác.
Cú pháp
bazel mod <subcommand> [<options>] [<arg> [<arg>...]]
Các lệnh con hiện có và đối số bắt buộc 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, thì các mô-đun này sẽ được hiển thị trực tiếp bên dưới gốc và biểu đồ chỉ được mở rộng bắt đầu từ các mô-đun đó (xem ví dụ).deps <arg>...: Hiển thị các phần phụ thuộc trực tiếp đã phân giải của từng mô-đun được chỉ định, tương tự nhưgraph.all_paths <arg>...: Hiển thị tất cả các đường dẫn phần phụ thuộc từ các mô-đun --from đến các mô-đun đích. Để đơn giản hoá kết quả, chỉ đường dẫn ngắn nhất đầu tiên được hiển thị khi nhiều đường dẫn có cùng hậu tố. Ví dụ: A -> B -> X sẽ được hiển thị, nhưng đường dẫn dài hơn A -> C -> B -> X sẽ bị bỏ qua. Nói cách khác, đối với mọi mô-đun Y phụ thuộc trực tiếp vào mô-đun đích X, kết quả chỉ chứa đường dẫn ngắn nhất đi qua Y để đến X.path <arg>...: Có cùng ngữ nghĩa nhưall_paths, nhưng chỉ hiển thị một đường dẫ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ả những 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 vào các mô-đun đó. Kết quả của lệnhexplainvề cơ bản là phiên bản đã cắt tỉa của lệnhall_paths, chứa 1) mô-đun gốc; 2) các phần phụ thuộc trực tiếp của mô-đun gốc dẫn đến các mô-đun đối số; 3) các phần phụ thuộc trực tiếp của mô-đun đối số; 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 ví dụ). Sử dụng--all_reposđể hiển thị định nghĩa của tất cả các kho lưu trữ trong toàn bộ biểu đồ phần phụ thuộc hoặc--all_visible_reposđể hiển thị định nghĩa của tất cả các kho lưu trữ có thể nhìn thấy từ--base_module.show_extension <extension>...: Hiển thị thông tin về từng tiện ích đượ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 các kho lưu trữ đó bằnguse_repo, và danh sách các cách sử dụng tiện ích đó trong từng mô-đun nơi tiện ích được sử dụng, chứa các thẻ được chỉ định và lệnh gọiuse_repo(xem ví dụ).
<arg> đề cập đến một hoặc nhiều mô-đun hoặc kho lưu trữ. Đây có thể là một trong những mô-đun hoặc kho lưu trữ sau:
Chuỗi ký tự
<root>: Mô-đun gốc đại diện cho dự án hiện tại của bạn.<name>@<version>: Mô-đun<name>ở phiên bản<version>. Đối với mô-đun có chế độ ghi đè không đăng ký, hãy sử dụng dấu gạch dưới (_) làm<version>.<name>: Tất cả các phiên bản hiện tại của mô-đun<name>.@<repo_name>: Kho lưu trữ có tên hiển thị đã cho trong bối cảnh của--base_module.@@<repo_name>: Kho lưu trữ có tên chính tắc đã cho.
Trong bối cảnh yêu cầu chỉ định mô-đun, <arg> đề cập đến các kho lưu trữ tương ứng với mô-đun (trái ngược với các kho lưu trữ do tiện ích tạo) cũng có thể được sử dụng. Ngược lại, trong bối cảnh yêu cầu chỉ định kho lưu trữ, <arg> đề cập đến
các 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 của kho lưu trữ (ví dụ:
//pkg/path:file.bzl).
Tuỳ chọn lệnh biểu đồ
Các tuỳ chọn sau chỉ ảnh hưởng đến các lệnh con in biểu đồ (graph,
deps, all_paths, path, và explain):
--from <arg>[,<arg>[,...]]mặc định:<root>: (Các) mô-đun mà biểu đồ được mở rộng tronggraph,all_paths,path, vàexplain. Hãy xem phần mô tả của các lệnh con để biết thêm thông tin.--verbosemặc định: "false": Đưa vào biểu đồ kết quả thông tin bổ sung về việc phân giải phiên bản của từng mô-đun. Nếu phiên bản mô-đun 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 phiên bản đó bị thay thế và mô-đun nào yêu cầu phiên bản mới nếu lý do là Lựa chọn phiên bản tối thiểu.--include_unusedmặc định: "false": Đưa vào biểu đồ kết quả các mô-đun ban đầu có trong biểu đồ phần phụ thuộc, nhưng không được sử dụng sau khi phân giải mô-đun.--extension_info <mode>: Đưa thông tin về việc sử dụng tiện ích mô-đun vào biểu đồ kết quả (xem ví dụ).<mode>có thể là một trong những chế độ sau:hidden(mặc định): Không hiển thị thông tin nào về tiện ích.usages: Hiển thị các tiện ích trong mỗi mô-đun nơi chúng được sử dụng. Chúng được in ở dạng$<extension>.repos: Ngoàiusages, hãy hiển thị kho lưu trữ được nhập bằnguse_repotrong mỗi cách sử dụng tiện ích.all: Ngoàiusagesvàrepos, hãy hiển thị các kho lưu trữ do tiện ích tạo mà không mô-đun nào nhập. Các kho lưu trữ bổ sung này được hiển thị trong lần xuất hiện đầu tiên của tiện ích tạo trong kết quả và được kết nối bằng một cạnh dấu chấm.
--extension_filter <extension>[,<extension>[,...]]: Nếu được chỉ định, biểu đồ kết quả chỉ bao gồm các mô-đun sử dụng các tiện ích được chỉ định và các đường dẫn dẫn đến các mô-đun đó. Việc chỉ định danh sách tiện ích trống (như trong--extension_filter=) tương đương với việc chỉ định tất cả các tiện ích mà bất kỳ mô-đun nào trong biểu đồ phần phụ thuộc sử dụng.--depth <N>: Độ sâu của biểu đồ kết quả. Độ sâu là 1 chỉ hiển thị gốc và các phần phụ thuộc trực tiếp của gốc. Giá trị mặc định là 1 choexplain, 2 chodepsvà vô hạn cho các giá trị khác.--cyclesmặc định: "false": Đưa các cạnh chu kỳ vào biểu đồ kết quả.--include_builtinmặc định: "false": Đưa các mô-đun tích hợp sẵn (chẳng hạn như@bazel_tools) vào biểu đồ kết quả. Cờ này bị tắt theo mặc định, vì các mô-đun tích hợp sẵn được ngầm phụ thuộc vào mọi mô-đun khác, điều này làm cho kết quả trở nên lộn xộn.--charset <charset>mặc định: utf8: Chỉ định bộ ký tự để sử dụng cho kết quả văn bản. Các giá trị hợp lệ là"utf8"và"ascii". Sự khác biệt đáng kể duy nhất là ở các ký tự đặc biệt được dùng để vẽ biểu đồ ở định dạng kết quả"text"không tồn tại trong bộ ký tự"ascii"Do đó, bộ ký tự"ascii"có mặt để 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>: Đưa thông tin về việc sử dụng tiện ích mô-đun vào biểu đồ kết quả.<mode>có thể là một trong những chế độ sau:text(mặc định): Biểu diễn có thể đọc được của biểu đồ kết quả (được làm phẳng dưới dạng cây).json: Xuất biểu đồ ở dạng đối tượng JSON (được làm phẳng dưới dạng a cây).graph: Xuất biểu đồ ở dạng biểu diễn dot Graphviz.
bazel mod graph --output graph | dot -Tsvg > /tmp/graph.svg
Tuỳ chọn show_repo
show_repo hỗ trợ một tập hợp định dạng kết quả khác:
--output <mode>: Thay đổi cách hiển thị định nghĩa kho lưu trữ.<mode>có thể là một trong những chế độ sau:text(mặc định): Hiển thị định nghĩa kho lưu trữ trong Starlark.streamed_proto: In một luồng giao thức đệm được phân tách theo độ dàiRepository.streamed_jsonproto: Tương tự như--output streamed_proto, in một luồngRepositorygiao thức đệm nhưng ở định dạng NDJSON.
Tuỳ chọn khác
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 đối mà theo đó tên kho lưu trữ hiển thị trong các đối số được diễn giải. Xin lưu ý rằng đối số này có thể ở dạng@<repo_name>; đối số này luôn được diễn giải tương đối với mô-đun gốc.--extension_usages <arg>[,<arg>[,...]]: Lọcshow_extensionđể chỉ hiển thị các cách sử dụng tiện ích từ các mô-đun được chỉ định.
Ví dụ
Một số cách sử dụng có thể có của lệnh mod trên một dự án Bazel thực tế được trình bày
dưới đây để giúp bạn có ý tưởng chung về cách sử dụng lệnh này để kiểm tra các phần phụ thuộc bên ngoài của dự án.
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")
|
|
|
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 ...Hiển thị toàn bộ biểu đồ phần phụ thuộc (bao gồm cả các mô-đun không được sử dụng và có thêm thông tin về việc 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)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 ...Hiển thị tất cả các đường dẫn giữa hai mô-đun của bạn.
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 ...Xem lý do và cách 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 ...Xem quy tắc cơ bản của các kho lưu trữ mô-đun' .
bazel mod show_repo rules_cc stardoc## rules_cc@0.0.1: load("@@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "rules_cc+", 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, ) ## stardoc: load("@@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "stardoc+", 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, )bazel mod show_repocũng hoạt động với các kho lưu trữ được nhập bằnguse_repovà các kho lưu trữ được tạo bằnguse_repo_rule. Nếushow_repođược gọi bằng tên kho lưu trữ hiển thị hoặc--all_visible_repos, thì tên kho lưu trữ hiển thị sẽ được hiển thị trên một dòng có tiền tố##.bazel mod show_repo @jq_linux_arm64 bazel mod show_repo --all_visible_repos## @jq_linux_arm64: load("@@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") http_file( name = "+http_file+jq_linux_arm64", executable = True, integrity = "sha256-TdLYoGYd8LIvG7mh+YMPBrbzuPfZEhGh7118TwaotKU=", urls = ["https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-arm64"], )Xem các tiện ích mô-đun được sử dụng trong biểu đồ phần phụ thuộc của bạn.
bazel mod graph --extension_info=usages<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 ...Xem các kho lưu trữ được tạo và nhập từ một số tiện ích cụ thể như 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 ...Xem danh sách các kho lưu trữ được tạo của một tiện ích và cách tiện ích đó được sử dụng trong từng 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)... )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++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>