Comando mod

Informar um problema Mostrar fonte Por noite · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

O comando mod, introduzido no Bazel 6.3.0, fornece várias ferramentas para ajudar você o usuário entende o gráfico de dependência externa quando Bzlmod está ativado. Ela permite visualizar o gráfico de dependências, descobrir por que um determinado módulo ou de um módulo estiver presente no gráfico, consulte as definições de repositório que apoiam módulos, inspecionar o uso de extensões de módulo e repositórios gerados, entre outras funções.

Sintaxe

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

Os subcomandos disponíveis e seus respectivos argumentos obrigatórios são:

  • graph: mostra o gráfico de dependências completo do projeto, a partir de módulo raiz. Se um ou mais módulos forem especificados em --from, esses módulos são mostrados diretamente abaixo da raiz, e o gráfico só é expandido começando por elas (veja o exemplo).

  • deps <arg>...: mostra as dependências diretas resolvidas de cada um dos módulos especificados, de forma semelhante a graph.

  • all_paths <arg>...: mostra todos os caminhos existentes da raiz até o <arg>... especificado. Se um ou mais módulos forem especificados em --from, esses módulos são mostrados diretamente abaixo da raiz, e o gráfico contém qualquer caminho existente dos módulos --from para os módulos de argumentos (consulte exemplo).

  • path <arg>...: tem a mesma semântica de all_paths, mas exibe apenas uma caminho único de um dos módulos --from para um dos módulos de argumentos.

  • explain <arg>...: mostra todos os locais em que os módulos especificados aparecem no gráfico de dependências, junto com os módulos que dependem diretamente de para resolvê-los com rapidez. A saída do comando explain é essencialmente uma versão reduzida do o comando all_paths, que contém 1) o módulo raiz; 2) o módulo raiz dependências diretas que levam aos módulos do argumento. 3) o argumento módulos dependentes diretos e 4) os próprios módulos de argumentos (exemplo).

  • show_repo <arg>...: mostra a definição dos repositórios especificados. Consulte exemplo).

  • show_extension <extension>...: mostra informações sobre cada um dos extensões especificadas: uma lista dos repositórios gerados, juntamente com os módulos que as importam usando use_repo e uma lista dos usos desse em cada um dos módulos em que é usado, contendo a extensão especificada e as chamadas use_repo (veja exemplo).

<arg> refere-se a um ou mais módulos ou repositórios. Pode ser:

  • A string literal <root>: o módulo raiz que representa sua projeto.

  • <name>@<version>: o módulo <name> na versão <version>. Para um módulo com uma substituição que não seja do registro, use um sublinhado (_) como <version>.

  • <name>: todas as versões atuais do módulo <name>.

  • @<repo_name>: o repositório com o parâmetro aparente name no contexto do --base_module.

  • @@<repo_name>: o repositório com a string canônica nome.

Em um contexto que requer a especificação de módulos, <arg>s se referem a repositórios que correspondem a módulos, e não repositórios gerados por extensões, também podem ser usados. Por outro lado, em um contexto que requer a especificação de repositórios, <arg>s se referem a podem substituir os repositórios correspondentes.

<extension> precisa estar no formato <arg><label_to_bzl_file>%<extension_name>. A parte <label_to_bzl_file> precisa ser um rótulo relativo ao repositório (por exemplo, //pkg/path:file.bzl).

As opções a seguir afetam apenas os subcomandos que mostram gráficos (graph, deps, all_paths, path e explain):

  • --from <arg>[,<arg>[,...]] padrão: <root>: os módulos a partir dos quais o gráfico é expandido em graph, all_paths, path e explain. Marca de seleção dos subcomandos, descrições para mais detalhes.

  • --verbose default: "false": incluir no extra do gráfico de saída. informações sobre a resolução da versão de cada módulo. Se o módulo versão alterada durante a resolução, mostra qual versão a substituiu ou qual era a versão original, por que ela foi substituída e quais módulos solicitou a nova versão se o motivo fosse Versão mínima Seleção.

  • --include_unused default: "false": incluir no gráfico de saída o módulos que estavam originalmente presentes no gráfico de dependências, mas se tornaram não são usados após a resolução do módulo.

  • --extension_info <mode>: inclui informações sobre a extensão do módulo. de uso como parte do gráfico de saída (confira o exemplo). <mode> pode ser:

    • hidden (padrão): não mostra nada sobre extensões.

    • usages: mostra as extensões em cada módulo em que elas são usadas. Eles são mostrados na forma de $<extension>.

    • repos: além de usages, mostre o repositório importado usando use_repo em cada uso da extensão.

    • all: além de usages e repos, também mostrar repositórios gerados por extensão que não são importados por nenhum módulo. Esses repositórios extras são mostrados na primeira ocorrência de seus na saída e são conectadas por uma borda pontilhada.

  • --extension_filter <extension>[,<extension>[,...]]: se especificado, o o gráfico de saída só inclui módulos que usam as extensões especificadas e os caminhos que levam a esses módulos. Especificar uma lista de extensões vazia (como em --extension_filter=) é equivalente a especificar todas as extensões usadas por qualquer módulo no gráfico de dependências.

  • --depth <N>: a profundidade do gráfico de saída. Uma profundidade de 1 mostra apenas raiz e suas dependências diretas. O padrão é 1 para explain, 2 para deps e infinito para os outros.

  • --cycles default: "false": inclui as bordas do ciclo no gráfico de saída.

  • --include_builtin default: "false": inclui módulos integrados (como @bazel_tools) no gráfico de saída. Essa sinalização fica desativada por padrão, os módulos integrados dependem implicitamente de todos os outros módulos, que prejudica muito a saída.

  • --charset <charset> default: utf8: especifica o conjunto de caracteres a ser usado para texto. saída. Os valores válidos são "utf8" e "ascii". As únicas diferenças a diferença está nos caracteres especiais usados para desenhar o gráfico na Formato de saída "text", que não existe no conjunto de caracteres "ascii". Portanto, o conjunto de caracteres "ascii" está presente para oferecer suporte ao uso em plataformas legadas que não podem usar Unicode.

  • --output <mode>: inclui informações sobre os usos de extensão de módulo como do gráfico de saída. <mode&gt; pode ser:

    • text (padrão): uma representação legível do gráfico de saída (nivelados como uma árvore).

    • json: gera o gráfico na forma de um objeto JSON (nivelado como um .

    • graph: gera o gráfico na representação de ponto do Graphviz.

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

Outras opções incluem:

  • --base_module <arg> padrão: <root>: especifica um módulo relativo a quais nomes de repositório aparentes em argumentos são interpretados. Observe que este argumento em si pode estar no formato de @<repo_name>; isso é sempre interpretado em relação ao módulo raiz.

  • --extension_usages <arg>[,<arg>[,...]]: filtra show_extension para somente exibe os usos de extensões dos módulos especificados.

Exemplos

Alguns usos possíveis do comando mod em um projeto real do Bazel são demonstrados abaixo para dar uma ideia geral de como você pode usá-lo para inspecionar as dependências externas.

Arquivo 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")
Gráfico antes da resolução
Gráfico antes da resolução
Gráfico após a resolução
Gráfico após a resolução
  1. Exibir todo o gráfico de dependência dos projeto.

    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. Mostrar todo o gráfico de dependência (incluindo módulos não utilizados e informações extras sobre a resolução da versão).

    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. Exibir o gráfico de dependências expandido de alguns módulos específicos.

    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. Exibir todos os caminhos entre dois dos seus módulos.

    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. Ver por que e como seu projeto depende de alguns módulo(s).

    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. Consultar a regra subjacente de alguns módulos repositórios.

    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. Veja quais extensões de módulo são usadas nos seus gráfico de dependências.

    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. Saiba quais repositórios são gerados e importados de alguma extensão específica como parte do gráfico de dependências.

    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. Veja a lista de repositórios gerados de um e como ela é usada em cada módulo.

    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. Consultar a regra subjacente de algumas repositórios gerados por extensão.

    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>