mod komutu

Sorun bildirin Kaynağı göster

Bazel 6.3.0'da kullanıma sunulan mod komutu, Bzlmod etkinleştirildiğinde kullanıcının harici bağımlılık grafiğini anlamasına yardımcı olacak çeşitli araçlar sunar. Bağımlılık grafiğini görselleştirmenizi, belirli bir modülün veya bir modülün sürümünün neden grafikte bulunduğunu anlamanızı, depo tanımlarını destekleme modüllerini görüntülemenizi, diğer işlevlerle birlikte modül uzantılarının ve oluşturulan depoların kullanımlarını incelemenizi sağlar.

Söz dizimi

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

Kullanılabilir alt komutlar ve ilgili gerekli bağımsız değişkenler şunlardır:

  • graph: Kök modülden itibaren projenin tam bağımlılık grafiğini görüntüler. --from içinde bir veya daha fazla modül belirtilirse bu modüller doğrudan kök dizinin altında gösterilir ve grafik yalnızca kök dizinden başlayarak genişletilir (örneği inceleyin).

  • deps <arg>...: graph uygulamasına benzer şekilde, belirtilen modüllerin her birinin çözülmüş doğrudan bağımlılıklarını gösterir.

  • all_paths <arg>...: Kökten belirtilen <arg>... yoluna kadar olan tüm mevcut yolları gösterir. --from içinde bir veya daha fazla modül belirtilirse bu modüller doğrudan kök dizinin altında gösterilir ve grafik, --from modüllerinden bağımsız değişken modüllerine giden mevcut herhangi bir yolu içerir (örneğe bakın).

  • path <arg>...: all_paths ile aynı anlama sahiptir ancak --from modüllerinin birinden bağımsız değişken modüllerinden birine yalnızca tek bir yol görüntüler.

  • explain <arg>...: Belirtilen modüllerin bağımlılık grafiğinde göründüğü tüm yerleri ve bunlara doğrudan bağlı olan modülleri gösterir. explain komutunun çıkışı, temelde all_paths komutunun 1) kök modülü, 2) kök modülün bağımsız değişken modüllerine yol açan doğrudan bağımlılıklarını; 3) bağımsız değişken modüllerinin doğrudan bağımlılarını ve 4) bağımsız değişken modüllerinin kendisini içeren, kısaltılmış bir sürümüdür (örneğe bakın).

  • show_repo <arg>...: Belirtilen depoların tanımını gösterir (örneğe bakın).

  • show_extension <extension>...: Belirtilen uzantıların her biri hakkındaki bilgileri görüntüler: Oluşturulan depoların, bunları use_repo kullanarak içe aktaran modüllerin ve bunların bir listesi, ayrıca bu uzantının kullanıldığı modüllerin her birinde, belirtilen etiketleri ve use_repo çağrılarını içeren kullanım listesi (örneğe bakın).

<arg>, bir veya daha fazla modül ya da depoyu ifade eder. Şunlardan biri olabilir:

  • <root> değişmez dizesi: Mevcut projenizi temsil eden kök modül.

  • <name>@<version>: <version> sürümündeki <name> modülü. Kayıt defteri dışı geçersiz kılmaya sahip bir modül için <version> olarak alt çizgi (_) kullanın.

  • <name>: <name> modülünün mevcut tüm sürümleri.

  • @<repo_name>: --base_module bağlamında verilen görünür ada sahip depo.

  • @@<repo_name>: Belirtilen standart ada sahip depo.

Modüllerin belirtilmesini gerektiren bir bağlamda, modüllere karşılık gelen (uzantı tarafından oluşturulan depolardan farklı olarak) depoları ifade eden <arg>'ler de kullanılabilir. Buna karşılık, kod depolarının belirtilmesini gerektiren bir bağlamda, modüllerden bahsedilen <arg> öğeleri, ilgili depoları temsil edebilir.

<extension>, <arg><label_to_bzl_file>%<extension_name> biçiminde olmalıdır. <label_to_bzl_file> bölümü, depoya bağlı bir etiket olmalıdır (örneğin, //pkg/path:file.bzl).

Aşağıdaki seçenekler yalnızca grafikleri (graph, deps, all_paths, path ve explain) yazdıran alt komutları etkiler:

  • --from <arg>[,<arg>[,...]] varsayılan: <root>: Grafiğin genişletildiği modüller: graph, all_paths, path ve explain. Daha ayrıntılı bilgi için alt komutların açıklamalarını inceleyin.

  • --verbose default: "false": Çıkış grafiğine her modülün sürüm çözünürlüğüyle ilgili ek bilgileri ekleyin. Çözünürlük sırasında modül sürümü değiştiyse hangi sürümün değiştirildiğini veya orijinal sürümün hangisi olduğunu, değiştirilme nedenini ve neden Minimal Sürüm Seçimi ise hangi modüllerin yeni sürümü istediğini gösterin.

  • --include_unused default: "false": Orijinal olarak bağımlılık grafiğinde bulunan ancak modül çözümlemesinden sonra kullanılmayan modülleri çıkış grafiğine ekleyin.

  • --extension_info <mode>: Çıkış grafiğinin bir parçası olarak modül uzantısı kullanımlarıyla ilgili bilgileri ekleyin (örneği inceleyin). <mode> şunlardan biri olabilir:

    • hidden (varsayılan): Uzantılar hakkında hiçbir şey gösterme.

    • usages: Uzantıları her modülün altında kullanıldıkları şekilde gösterin. Bunlar $<extension> biçiminde basılır.

    • repos: usages'a ek olarak, her uzantı kullanımı altında use_repo kullanılarak içe aktarılan depoyu gösterir.

    • all: usages ve repos'ye ek olarak, uzantı tarafından oluşturulan ve herhangi bir modül tarafından içe aktarılmayan depoları da gösterir. Bu ek depolar, çıkışta oluşturan uzantı ilk oluşumu altında gösterilir ve noktalı bir kenarla birbirine bağlanır.

  • --extension_filter <extension>[,<extension>[,...]]: Belirtilirse çıkış grafiği yalnızca belirtilen uzantıları kullanan modülleri ve bu modüllere giden yolları içerir. Boş bir uzantı listesi belirtmek (--extension_filter= ürününde olduğu gibi), bağımlılık grafiğindeki herhangi bir modül tarafından kullanılan tüm uzantıları belirtmeye eşdeğerdir.

  • --depth <N>: Çıkış grafiğinin derinliği. 1 derinliği yalnızca kökü ve doğrudan bağımlılıklarını gösterir. explain için varsayılan değer 1, deps için 2 ve diğerleri için sonsuzdur.

  • --cycles default: "false": Döngü kenarlarını çıkış grafiğine dahil eder.

  • --include_builtin default: "false": Yerleşik modülleri (@bazel_tools gibi) çıkış grafiğine ekleyin. Yerleşik modüller diğer tüm modüller tarafından dolaylı olarak bağımlı olduğundan bu işaret varsayılan olarak devre dışıdır ve sonucu büyük ölçüde karmaşık hale getirir.

  • --charset <charset> default: utf8: Metin çıkışı için kullanılacak karakter kümesini belirtin. Geçerli değerler "utf8" ve "ascii" değerleridir. Tek önemli fark, grafiği "text" çıkış biçiminde çizmek için kullanılan ve "ascii" karakter kümesinde bulunmayan özel karakterlerdir. Bu nedenle, Unicode kullanamayan eski platformlarda da kullanımı desteklemek için "ascii" karakter kümesi mevcuttur.

  • --output <mode>: Modül uzantısı kullanımlarıyla ilgili bilgileri çıkış grafiğine ekleyin. <mode> şunlardan biri olabilir:

    • text (varsayılan): Çıkış grafiğinin kullanıcılar tarafından okunabilen bir temsili (ağaç olarak düzleştirilmiştir).

    • json: Grafiği bir JSON nesnesi (ağaç olarak düzleştirilmiş) biçiminde verir.

    • graph: Grafiği, Graphviz noktası temsilinde verir.

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

Diğer seçenekler şunlardır:

  • --base_module <arg> varsayılan: <root>: Bağımsız değişkenlerdeki görünen depo adlarının yorumlanacağı bir modül belirtin. Bu bağımsız değişkenin kendisinin @<repo_name> biçiminde olabileceğini unutmayın. Bunun için her zaman kök modüle göre yorumlanır.

  • --extension_usages <arg>[,<arg>[,...]]: show_extension filtresini yalnızca belirtilen modüllerdeki uzantı kullanımlarını gösterecek şekilde filtreler.

Örnekler

Projenizin dış bağımlılıklarını incelemek için nasıl kullanabileceğinize dair genel bir fikir vermek amacıyla, gerçek bir Bazel projesinde mod komutunun olası bazı kullanımları aşağıda gösterilmiştir.

MODULE.bazel dosyası:

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")
Çözünürlükten Önce Grafik
Çözümden Önce Grafik
Çözünürlükten Sonra Grafik
Çözümden Sonra Grafik
  1. Projenizin tüm bağımlılık grafiğini görüntüleyin.

    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. Bağımlılık grafiğinin tamamını görüntüleyin (kullanılmayan modüller ve sürüm çözünürlüğü hakkında ek bilgiler dahil).

    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. Belirli modüllerden genişletilmiş bağımlılık grafiğini görüntüleyin.

    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. Modüllerinizden ikisi arasındaki tüm yolları görüntüleyin.

    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. Projenizin bazı modüllere neden ve nasıl bağlı olduğunu öğrenin.

    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. Bazı modül depolarınızın temel kuralını görün.

    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. Bağımlılık grafiğinizde hangi modül uzantılarının kullanıldığını görün.

    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. Bağımlılık grafiğinin bir parçası olarak belirli bir uzantıdan hangi depoların oluşturulduğunu ve içe aktarıldığını görün.

    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. Bir uzantının oluşturulan depolarının listesini ve bu uzantının her modülde nasıl kullanıldığını görün.

    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. Uzantı tarafından oluşturulan bazı depoların temel kuralını inceleyin.

    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>