Perintah mod

Laporkan masalah Lihat sumber Per Malam · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Perintah mod, yang diperkenalkan di Bazel 6.3.0, menyediakan berbagai alat untuk membantu pengguna memahami grafik dependensi eksternal mereka ketika Bzlmod diaktifkan. Ini memungkinkan Anda memvisualisasikan grafik dependensi, cari tahu mengapa modul tertentu atau versi modul ada dalam grafik, lihat dukungan definisi repo modul, memeriksa penggunaan ekstensi modul, dan repositori yang dihasilkan, di antara fungsi lainnya.

Sintaksis

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

Subperintah yang tersedia dan argumen masing-masing yang diperlukan adalah:

  • graph: Menampilkan grafik dependensi lengkap project, mulai dari modul root. Jika satu atau beberapa modul ditentukan di --from, parameter ini modul ditampilkan langsung di bawah root, dan grafik hanya diperluas mulai dari nilai tersebut (lihat contoh).

  • deps <arg>...: Menampilkan dependensi langsung yang di-resolve dari setiap modul tertentu, mirip dengan graph.

  • all_paths <arg>...: Menampilkan semua jalur yang ada dari root ke menentukan <arg>.... Jika satu atau beberapa modul ditentukan di --from, modul ini ditampilkan langsung di bawah {i>root<i}, dan grafiknya berisi jalur yang ada dari modul --from ke modul argumen (lihat contoh).

  • path <arg>...: Memiliki semantik yang sama dengan all_paths, tetapi hanya menampilkan satu jalur dari salah satu modul --from ke salah satu modul argumen.

  • explain <arg>...: Menampilkan semua tempat munculnya modul yang ditentukan di grafik dependensi, bersama dengan modul yang bergantung langsung pada mereka. Output perintah explain pada dasarnya adalah versi yang dipangkas dari perintah all_paths, yang berisi 1) modul root; 2) modul root dependensi langsung yang mengarah ke modul argumen; 3) Argumen modul' tanggungan langsung; dan 4) modul argumen itu sendiri (lihat contoh).

  • show_repo <arg>...: Menampilkan definisi repositori yang ditentukan (lihat contoh).

  • show_extension <extension>...: Menampilkan informasi tentang setiap ekstensi tertentu: daftar repositori yang dihasilkan bersama dengan modul yang mengimpornya menggunakan use_repo, dan daftar penggunaannya di setiap modul tempat ekstensi digunakan, yang berisi atribut tag dan panggilan use_repo (lihat contoh).

<arg> merujuk pada satu atau beberapa modul atau repositori. Dapat berupa salah satu dari:

  • String literal <root>: Modul root yang mewakili modul saat ini proyek.

  • <name>@<version>: Modul <name> di versi <version>. Untuk modul dengan penggantian non-registry, gunakan garis bawah (_) sebagai <version>.

  • <name>: Semua versi modul <name> yang ada.

  • @<repo_name>: Repo dengan yang jelas name dalam konteks --base_module.

  • @@<repo_name>: Repositori dengan kanonik yang diberikan nama.

Dalam konteks yang memerlukan penentuan modul, <arg> mengacu pada repositori yang sesuai dengan modul (bukan repositori yang dihasilkan ekstensi) juga dapat data Sebaliknya, dalam konteks yang memerlukan menentukan repo, <arg> yang mengacu pada modul dapat menggantikan repositori yang sesuai.

<extension> harus dalam bentuk <arg><label_to_bzl_file>%<extension_name>. Bagian <label_to_bzl_file> harus berupa label repo-relatif (misalnya, //pkg/path:file.bzl).

Opsi berikut hanya memengaruhi subperintah yang mencetak grafik (graph, deps, all_paths, path, dan explain):

  • --from <arg>[,<arg>[,...]] default: <root>: Modul yang digunakan grafik diperluas di graph, all_paths, path, dan explain. Periksa subperintah deskripsi untuk mengetahui detail selengkapnya.

  • --verbose default: "false": Menyertakan dalam tambahan grafik output informasi tentang resolusi versi dari setiap modul. Jika modul versi berubah selama resolusi, tunjukkan versi mana yang menggantikannya atau apa versi aslinya, alasannya diganti, dan modul mana meminta versi baru jika alasannya adalah Versi Minimal Pilihan.

  • --include_unused default: "false": Sertakan dalam grafik output modul yang awalnya ada dalam grafik dependensi, tetapi menjadi tidak digunakan setelah resolusi modul.

  • --extension_info <mode>: Menyertakan informasi tentang ekstensi modul penggunaan sebagai bagian dari grafik output (lihat contoh). <mode> dapat berupa salah satu dari:

    • hidden (default): Tidak menampilkan apa pun tentang ekstensi.

    • usages: Menampilkan ekstensi di bawah setiap modul tempat ekstensi digunakan. Mereka dicetak dalam bentuk $<extension>.

    • repos: Selain usages, tampilkan repo yang diimpor menggunakan use_repo di bawah setiap penggunaan ekstensi.

    • all: Selain usages dan repos, tampilkan juga repositori yang dihasilkan ekstensi yang tidak diimpor oleh modul mana pun. Ini repo tambahan ditampilkan di bawah kemunculan pertama di {i>output<i}, dan terhubung dengan tepi bertitik.

  • --extension_filter <extension>[,<extension>[,...]]: Jika ditentukan, grafik output hanya menyertakan modul yang menggunakan ekstensi yang ditentukan, dan jalur yang mengarah ke modul-modul tersebut. Menentukan daftar ekstensi kosong (sebagai di --extension_filter=) sama dengan menentukan semua ekstensi yang digunakan oleh modul apa pun pada grafik dependensinya.

  • --depth <N>: Kedalaman grafik output. Kedalaman 1 hanya menampilkan {i>root <i}dan dependensi langsungnya. Default-nya adalah 1 untuk explain, 2 untuk deps dan tak terhingga untuk yang lain.

  • --cycles default: "false": Menyertakan tepi siklus dalam grafik output.

  • --include_builtin default: "false": Menyertakan modul bawaan (seperti @bazel_tools) pada grafik output. Penanda ini dinonaktifkan secara {i>default<i}, karena modul bawaan secara implisit bergantung pada oleh setiap modul lain akan sangat mengacaukan {i>output<i}.

  • --charset <charset> default: utf8: Menentukan charset yang akan digunakan untuk teks {i>output<i} tersebut. Nilai yang valid adalah "utf8" dan "ascii". Satu-satunya perbedaannya terletak pada karakter khusus yang digunakan untuk menggambar grafik di Format output "text", yang tidak ada dalam charset "ascii". Oleh karena itu, charset "ascii" tersedia untuk juga mendukung penggunaan pada platform lama yang tidak dapat menggunakan Unicode.

  • --output <mode>: Sertakan informasi tentang penggunaan ekstensi modul sebagai di grafik output. <mode&gt; dapat berupa salah satu dari:

    • text (default): Representasi grafik output yang dapat dibaca manusia (diratakan sebagai pohon).

    • json: Menghasilkan grafik dalam bentuk objek JSON (disatukan sebagai ).

    • graph: Menghasilkan grafik dalam representasi titik Graphviz.

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

Opsi lainnya mencakup:

  • --base_module <arg> default: <root>: Menentukan modul yang terkait dengan nama repo yang jelas dalam argumen akan ditafsirkan. Perhatikan bahwa argumen itu sendiri dapat berupa @<repo_name>; ini selalu ditafsirkan relatif terhadap modul {i>root<i}.

  • --extension_usages <arg>[,<arg>[,...]]: Memfilter show_extension ke hanya menampilkan penggunaan ekstensi dari modul yang ditentukan.

Contoh

Beberapa kemungkinan penggunaan perintah mod pada project Bazel sebenarnya ditampilkan di bawah ini untuk memberikan gambaran umum tentang bagaimana Anda dapat menggunakannya untuk memeriksa dependensi eksternal.

File 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")
Grafik Sebelum Resolusi
Grafik Sebelum Resolusi
Grafik Setelah Resolusi
Grafik Setelah Resolusi
  1. Menampilkan seluruh grafik dependensi proyek.

    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. Menampilkan seluruh grafik dependensi (termasuk modul yang tidak digunakan dan dengan informasi tambahan tentang resolusi versi).

    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. Menampilkan grafik dependensi yang diperluas dari beberapa modul spesifik.

    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. Menampilkan semua jalur di antara dua modul.

    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. Melihat alasan dan bagaimana project Anda bergantung pada beberapa aspek modul.

    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. Melihat aturan dasar dari beberapa modul repo.

    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. Melihat ekstensi modul yang digunakan di grafik dependensi.

    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. Melihat repositori yang dibuat dan diimpor dari beberapa ekstensi tertentu sebagai bagian dari grafik dependensi.

    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. Lihat daftar repositori yang dihasilkan ekstensi dan cara ekstensi tersebut digunakan dalam setiap modul.

    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. Melihat aturan dasar dari beberapa repositori yang dihasilkan ekstensi.

    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>