mod komutu

Sorun bildir Kaynağı göster

Bazel 6.3.0'da kullanıma sunulan mod komutu, kullanıcının Bzlmod etkinleştirildiğinde harici bağımlılık grafiğini anlamasına yardımcı olacak bir dizi araç sağlar. Bağımlılık grafiğini görselleştirmenizi, grafikte belirli bir modülün veya sürümün neden bulunduğunu öğrenmenizi, modülleri destekleyen depo tanımlarını görüntülemenizi, modül uzantılarının ve bunların oluşturduğu depo 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 başlayarak projenin tam bağımlılık grafiğini gösterir. --from politikasında bir veya daha fazla modül belirtilmişse bu modüller doğrudan kök dizininin altında gösterilir ve grafik yalnızca bunlardan başlayarak genişletilir (örneği inceleyin).

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

  • all_paths <arg>...: Kökten belirtilen <arg>... noktasına kadar olan tüm mevcut yolları görüntüler. --from içinde bir veya daha fazla modül belirtilmişse bu modüller doğrudan kök dizininin altında gösterilir ve grafik, --from modüllerinden bağımsız değişken modüllerine giden mevcut tüm yolları içerir (örneği inceleyin).

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

  • explain <arg>...: Belirtilen modüllerin bağımlılık grafiğinde göründüğü tüm yerleri ve doğrudan bunlara bağlı olan modülleri gösterir. explain komutunun çıkışı, temelde all_paths komutunun ayıklanmış bir sürümüdür. Bu örnekte şunlar bulunur: 1) kök modülü; 2) kök modülün bağımsız değişken modüllerine yönlendiren doğrudan bağımlılıkları; 3) bağımsız değişken modüllerinin doğrudan bağımlılarını ve 4) bağımsız değişken modüllerini (örnek inceleyin).

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

  • show_extension <extension>...: Belirtilen her bir uzantı ile ilgili bilgileri görüntüler: oluşturulan depoların bir listesi, use_repo kullanılarak bunları içe aktaran modülleri ve bu uzantının kullanıldığı her bir modüldeki kullanımlarının bir listesi, belirtilen etiketleri ve use_repo çağrılarını içeren bir listedir (örneği inceleyin).

<arg>, bir veya daha fazla modüle ya da depoya işaret eder. Aşağıdakilerden biri olabilir:

  • Aynen dize <root>: Mevcut projenizi temsil eden kök modüldür.

  • <name>@<version>: <version> sürümündeki <name> modülü. Kayıt defteri dışında geçersiz kılma işlemi içeren 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 belirtilen görünen ada sahip depo.

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

Modüllerin belirtilmesini gerektiren bir bağlamda, modüllere karşılık gelen depolara referans veren <arg>'ler (uzantı tarafından oluşturulan depoların aksine) de kullanılabilir. Buna karşılık, depoların belirtilmesini gerektiren bir bağlamda, modüllere atıfta bulunan <arg> öğeleri ilgili depolar için kullanılabilir.

<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 yazdıran alt komutları (graph, deps, all_paths, path ve explain) etkiler:

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

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

  • --include_unused default: "false": Başlangıçta bağımlılık grafiğinde bulunan ancak modül çözünürlüğünden 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ğe bakın). <mode> şunlardan biri olabilir:

    • hidden (varsayılan): Uzantılarla ilgili hiçbir şey gösterme.

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

    • repos: usages özelliğine ek olarak, her uzantı kullanımı altında use_repo kullanılarak içe aktarılan depoyu gösterin.

    • all: usages ve repos'a ek olarak hiçbir modül tarafından içe aktarılmayan, uzantı tarafından oluşturulan depoları da gösterir. Bu ekstra depolar, çıkışta kaynak oluşturma işleminin ilk oluşumunun altında gösterilir ve noktalı bir kenarla 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= gibi), bağımlılık grafiğindeki herhangi bir modül tarafından kullanılan tüm uzantıları belirtmekle eşdeğerdir.

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

  • --cycles varsayılan: "false": Dönüş grafiğine döngü kenarlarını dahil eder.

  • --include_builtin varsayılan: "false": Çıkış grafiğine yerleşik modülleri (@bazel_tools gibi) dahil eder. Diğer tüm modüller yerleşik modüllere dolaylı olarak bağlı olduğundan, bu işaret varsayılan olarak devre dışıdır. Bu durum, çıktıyı önemli ölçüde daraltır.

  • --charset <charset> varsayılan: utf8: Metin çıkışı için kullanılacak karakter kümesini belirtin. Geçerli değerler "utf8" ve "ascii"'dir. 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>: Çıkış grafiğinin bir parçası olarak modül uzantısının kullanım bilgilerini ekleyin. <mode> şunlardan biri olabilir:

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

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

    • graph: Graphviz nokta temsilinde grafiği 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 yorumlandığına göre bir modül belirtin. Bu bağımsız değişkenin @<repo_name> biçiminde olabileceğini unutmayın. Bu, her zaman kök modüle göre yorumlanır.

  • --extension_usages <arg>[,<arg>[,...]]: Yalnızca belirtilen modüllerdeki uzantı kullanımlarını görüntülemek için show_extension filtresi uygular.

Örnekler

mod komutunun gerçek bir Bazel projesinde olası bazı kullanımları, projenizin dış bağımlılıklarını incelemek için bu komutu nasıl kullanabileceğinize dair genel bir fikir vermek amacıyla 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ük Öncesi Grafik
Çözüm Öncesi Grafik
Çözünürlük Sonrası Grafik
Çözüm Sonrası Grafik
  1. Projenizin bağımlılık grafiğinin tamamını 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ı (kullanılmayan modüller dahil ve sürüm çözünürlüğü hakkında ek bilgilerle birlikte) görüntüleyin.

    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. Bazı 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. İki modülünüz 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 neden ve nasıl bazı modüllere 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. Modüllerinizin depolarının temelini inceleyin.

    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>
    
  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 hangi depoların belirli bir uzantıdan 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 listesine ve bu uzantının her modülde nasıl kullanıldığına bakı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ılar tarafından oluşturulan bazı depoların temel kuralına bakın.

    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>