คำสั่ง mod
ที่ใช้ใน Bazel 6.3.0 มีเครื่องมือมากมายเพื่อช่วย
ผู้ใช้เข้าใจกราฟทรัพยากร Dependency ภายนอกเมื่อเปิดใช้ Bzlmod ทั้งนี้
จะช่วยให้คุณเห็นภาพกราฟทรัพยากร Dependency เพื่อหาสาเหตุ
เวอร์ชันของโมดูลแสดงอยู่ในกราฟ ดูการสนับสนุนคำจำกัดความของที่เก็บ
ตรวจสอบการใช้งานส่วนขยายโมดูลและที่เก็บที่ส่วนขยายสร้างขึ้น รวมถึง
ฟังก์ชันอื่นๆ
ไวยากรณ์
bazel mod <subcommand> [<options>] [<arg> [<arg>...]]
คำสั่งย่อยที่ใช้ได้และอาร์กิวเมนต์ที่จำเป็นที่เกี่ยวข้องมีดังนี้
graph
: แสดงกราฟทรัพยากร Dependency ทั้งหมดของโปรเจ็กต์ โดยเริ่มตั้งแต่ โมดูลราก หากระบุโมดูลอย่างน้อย 1 รายการใน--from
ค่าเหล่านี้ แสดงโมดูลโดยตรงภายใต้ราก และกราฟจะขยายออกเท่านั้น โดยเริ่มจากคำนั้น (ดูตัวอย่าง)deps <arg>...
: แสดงทรัพยากร Dependency โดยตรงที่แก้ไขแล้วของ โมดูลที่ระบุ คล้ายกับgraph
all_paths <arg>...
: แสดงเส้นทางที่มีอยู่ทั้งหมดจากรากถึง ระบุ<arg>...
หากระบุโมดูลอย่างน้อย 1 รายการใน--from
โมดูลเหล่านี้จะแสดงใต้รากโดยตรง และกราฟประกอบด้วย เส้นทางที่มีอยู่จากโมดูล--from
ไปยังโมดูลอาร์กิวเมนต์ (โปรดดู ตัวอย่าง)path <arg>...
: มีความหมายเหมือนกับall_paths
แต่แสดงเฉพาะ เส้นทางเดียวจากหนึ่งในโมดูล--from
ไปยังโมดูลอาร์กิวเมนต์หนึ่งexplain <arg>...
: แสดงสถานที่ทั้งหมดที่โมดูลที่ระบุปรากฏ ในกราฟทรัพยากร Dependency พร้อมด้วยโมดูลที่ขึ้นอยู่กับ ให้พวกเขา เอาต์พุตของคำสั่งexplain
เป็นเวอร์ชันที่มีการตัดทอนของ คำสั่งall_paths
ที่มี 1) โมดูลรูท 2) โมดูลรากของ ทรัพยากร Dependency โดยตรงที่นำไปสู่โมดูลอาร์กิวเมนต์ 3) อาร์กิวเมนต์ โมดูล พึ่งพาตนเองโดยตรง และ 4) ตัวโมดูลอาร์กิวเมนต์เอง (ดูตัวอย่าง)show_repo <arg>...
: แสดงคำจำกัดความของที่เก็บที่ระบุ (ดู ตัวอย่าง)show_extension <extension>...
: แสดงข้อมูลเกี่ยวกับ ส่วนขยายที่ระบุ: รายการที่เก็บที่สร้างขึ้นพร้อมกับโมดูล ที่นําเข้าโดยใช้use_repo
และรายการการใช้งานของ ในแต่ละโมดูลที่ใช้งาน ซึ่งมี และการเรียกuse_repo
(ดูตัวอย่าง)
<arg>
หมายถึงโมดูลหรือที่เก็บอย่างน้อย 1 รายการ ซึ่งอาจเป็นรายการใดรายการหนึ่งต่อไปนี้
สตริงตามตัวอักษร
<root>
: โมดูลรากที่แสดงค่าปัจจุบัน<name>@<version>
: โมดูล<name>
ในเวอร์ชัน<version>
สำหรับโมดูล โดยมีการลบล้างที่ไม่ใช่รีจิสทรี ให้ใช้เครื่องหมายขีดล่าง (_
) เป็น<version>
<name>
: เวอร์ชันปัจจุบันทั้งหมดของโมดูล<name>
@<repo_name>
: ที่เก็บที่มีปรากฏอย่างชัดเจน name ในบริบทของ--base_module
@@<repo_name>
: ที่เก็บที่มีหน้า Canonical ที่ระบุ name
ในบริบทที่จำเป็นต้องระบุโมดูล <arg>
s หมายถึงที่เก็บที่
ให้สอดคล้องกับโมดูล (ตรงข้ามกับที่เก็บที่สร้างขึ้น) ยังสามารถ
ในทางกลับกัน ในบริบทที่จำเป็นต้องระบุที่เก็บ <arg>
s จะหมายถึง
โมดูลต่างๆ สามารถรองรับที่เก็บที่เกี่ยวข้อง
<extension>
ต้องอยู่ในรูปแบบ <arg><label_to_bzl_file>%<extension_name>
ส่วน <label_to_bzl_file>
ต้องเป็นป้ายกำกับที่สัมพันธ์กับที่เก็บ (เช่น
//pkg/path:file.bzl
)
ตัวเลือกต่อไปนี้มีผลเฉพาะกับคำสั่งย่อยที่พิมพ์กราฟ (graph
,
deps
, all_paths
, path
และ explain
):
--from <arg>[,<arg>[,...]]
default:<root>
: โมดูลที่ กราฟจะขยายออกในgraph
,all_paths
,path
และexplain
ตรวจสอบ คำสั่งย่อย" สำหรับรายละเอียดเพิ่มเติม--verbose
default: "false": ใส่ในกราฟเอาต์พุตเพิ่มเติม ข้อมูลเกี่ยวกับความละเอียดเวอร์ชัน ของแต่ละโมดูล หากโมดูล เวอร์ชันเปลี่ยนแปลงระหว่างความละเอียด แสดงเวอร์ชันที่ถูกแทนที่ หรือ เวอร์ชันดั้งเดิมคืออะไร เหตุใดจึงแทนที่ และโมดูลใด ขอเวอร์ชันใหม่หากเหตุผลคือเวอร์ชันต่ำสุด ตัวเลือก--include_unused
default: "false": ใส่ข้อมูลในกราฟเอาต์พุต ซึ่งเดิมแสดงอยู่ในกราฟทรัพยากร Dependency แต่ได้กลายเป็น ไม่ได้ใช้หลังจากความละเอียดโมดูล--extension_info <mode>
: รวมข้อมูลเกี่ยวกับส่วนขยายโมดูล เป็นส่วนหนึ่งของกราฟเอาต์พุต (ดูตัวอย่าง)<mode>
สามารถเป็นอย่างใดอย่างหนึ่งต่อไปนี้hidden
(ค่าเริ่มต้น): ไม่แสดงข้อมูลใดๆ เกี่ยวกับส่วนขยายusages
: แสดงส่วนขยายในแต่ละโมดูลที่ใช้ โฆษณาเหล่านี้ พิมพ์ในรูปแบบ$<extension>
repos
: นอกเหนือจากusages
ให้แสดงที่เก็บที่นำเข้าโดยใช้use_repo
ภายใต้การใช้ส่วนขยายแต่ละรายการall
: นอกเหนือจากusages
และrepos
ให้แสดง Repos ที่สร้างโดยส่วนขยายที่ไม่ได้นำเข้าโดยโมดูลใดๆ เหล่านี้ ที่เก็บเพิ่มเติมจะแสดงใต้วิดีโอที่สร้างขึ้นครั้งแรก ในเอาต์พุต และเชื่อมต่อกันด้วยขอบเส้นประ
--extension_filter <extension>[,<extension>[,...]]
: หากระบุ พารามิเตอร์ กราฟเอาต์พุตจะมีเฉพาะโมดูลที่ใช้ส่วนขยายที่ระบุ และ เส้นทางที่นำไปสู่โมดูลเหล่านั้น การระบุรายการส่วนขยายที่ว่างเปล่า (เป็น ใน--extension_filter=
) เทียบเท่ากับการระบุส่วนขยายทั้งหมดที่ใช้ ตามโมดูลในกราฟทรัพยากร Dependency--depth <N>
: ความลึกของกราฟเอาต์พุต ความลึก 1 จะแสดงเฉพาะ รูทและการขึ้นต่อกันโดยตรง ค่าเริ่มต้นคือ 1 สำหรับexplain
และ 2 สำหรับdeps
และไม่มีที่สิ้นสุดสำหรับคนอื่นๆ--cycles
default: "false": รวมขอบรอบในกราฟเอาต์พุต--include_builtin
ค่าเริ่มต้น: "false": รวมโมดูลในตัว (เช่น@bazel_tools
) ในกราฟเอาต์พุต ธงนี้จะถูกปิดใช้งานโดยค่าเริ่มต้นเนื่องจาก โมดูลในตัวจะขึ้นอยู่กับโมดูลอื่นๆ ทั้งหมดโดยปริยาย จะทำให้เอาต์พุตดูรกตาอย่างมาก--charset <charset>
default: utf8: ระบุชุดอักขระที่จะใช้สำหรับข้อความ เอาต์พุต ค่าที่ถูกต้องคือ"utf8"
และ"ascii"
ปัจจัยเดียวที่สำคัญ ความแตกต่างจะอยู่ในอักขระพิเศษที่ใช้วาดกราฟใน รูปแบบเอาต์พุต"text"
ซึ่งไม่มีอยู่ในชุดอักขระ"ascii"
ดังนั้นชุดอักขระ"ascii"
จึงปรากฏขึ้นเพื่อรองรับการใช้งานบน แพลตฟอร์มเดิมที่ไม่สามารถใช้ Unicode--output <mode>
: รวมข้อมูลเกี่ยวกับการใช้ส่วนขยายโมดูลเป็น ในกราฟเอาต์พุต<mode
> สามารถเป็นอย่างใดอย่างหนึ่งต่อไปนี้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
เหลือเฉพาะ แสดงการใช้ส่วนขยายจากโมดูลที่ระบุ
ตัวอย่าง
มีการแสดงตัวอย่างการใช้คำสั่ง mod
ในโปรเจ็กต์ Bazel จริง
ด้านล่างเพื่อให้ภาพรวมเกี่ยวกับวิธีที่คุณจะใช้
การตรวจสอบโครงการ
ทรัพยากร Dependency ภายนอก
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")
แสดงกราฟทรัพยากร Dependency ทั้งหมด
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 ...
แสดงกราฟทรัพยากร Dependency ทั้งหมด (รวมถึง โมดูลที่ไม่ได้ใช้และข้อมูลเพิ่มเติมเกี่ยวกับความละเอียดเวอร์ชัน)
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)
แสดงกราฟทรัพยากร Dependency ที่ขยายจาก โมดูลเฉพาะบางรายการ
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 ...
แสดงเส้นทางทั้งหมดระหว่าง โมดูล
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 ...
ดูเหตุผลและวิธีการที่โครงการอาศัย โมดูล
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 ...
ดูกฎพื้นฐานของโมดูลบางส่วน ที่เก็บ
bazel mod show_repo rules_cc stardoc
## rules_cc@0.0.1: # <builtin> 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, ) # 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~", 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>
ดูว่าส่วนขยายโมดูลใดใช้ในบัญชี กราฟการขึ้นต่อกัน
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 ...
ดูที่เก็บที่สร้างขึ้นและ นำเข้าจากส่วนขยายบางรายการเพื่อเป็นส่วนหนึ่งของกราฟทรัพยากร Dependency
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 ...
ดูรายการที่เก็บที่สร้างขึ้นของ และวิธีใช้ส่วนขยายนั้นในแต่ละโมดูล
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)... )
ดูกฎพื้นฐาน ที่เก็บที่ส่วนขยายสร้างขึ้น
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>