Skip to content
Latchkey

O que é o Nx? O sistema de build para monorepos explicado

O Nx é um sistema de build para monorepos que entende o grafo de dependências entre projetos, faz cache dos resultados de tarefas e executa apenas o que suas mudanças de fato afetam.

O Nx traz builds inteligentes e orientados a cache para monorepos JavaScript e TypeScript (e além). Ao modelar como os projetos dependem uns dos outros, ele consegue pular trabalho não afetado, reutilizar resultados em cache e paralelizar tarefas, mantendo a CI rápida mesmo à medida que o repositório cresce.

O que é o Nx

O Nx é um sistema de build extensível e uma ferramenta de monorepo. Ele constrói um grafo de projetos a partir do seu workspace, executa tarefas (build, test, lint) entre projetos e faz cache da saída de cada tarefa. Plugins adicionam suporte de primeira classe a frameworks como React, Angular, Node e mais.

Comandos affected e cache

O Nx calcula quais projetos uma mudança afeta percorrendo o grafo de dependências, então "nx affected" executa tarefas apenas para os projetos impactados, em vez de todo o repositório. Seu cache de computação armazena os resultados das tarefas indexados por inputs; se nada relevante mudou, o Nx reproduz a saída em cache instantaneamente, em vez de reexecutar.

Um exemplo de uso

Execute apenas as tarefas afetadas pelas mudanças recentes.

Common Nx commands
# build everything affected by changes since main
nx affected -t build --base=main

# run a task for one project
nx test my-app

Papel em CI/CD

Em CI, os comandos affected do Nx mais o cache reduzem drasticamente o tempo do pipeline em monorepos, testando e construindo apenas o que mudou e reproduzindo resultados em cache. Um cache remoto compartilhado (Nx Cloud ou self-hosted) permite que a CI reutilize resultados entre execuções e máquinas. Em runners gerenciados que retêm um cache quente, esses pipelines de monorepo permanecem rápidos e baratos, com auto-retry cobrindo falhas transitórias.

Alternativas

O Turborepo é um task runner de monorepo mais leve e semelhante. O Bazel escala para repositórios poliglotas maiores com mais rigor e configuração. O Lerna cuida do versionamento e da publicação. O Nx é preferido por seu rico ecossistema de plugins e pelo equilíbrio entre poder e facilidade em monorepos JS/TS.

Principais conclusões

  • O Nx modela um grafo de projetos do monorepo para executar apenas as tarefas afetadas.
  • O cache de computação reproduz resultados de tarefas inalteradas instantaneamente.
  • Em CI, comandos affected mais um cache compartilhado reduzem o tempo de build do monorepo.

Guias relacionados