O Que É um Build Graph?
Um build graph é um mapa de cada tarefa de build e daquilo de que ela depende, para que a ferramenta de build saiba o que executar, em que ordem e o que pode pular.
Ferramentas de build modernas não executam tarefas em uma sequência fixa. Elas constroem um grafo direcionado de tarefas e dependências e depois o percorrem - executando ramos independentes em paralelo e pulando nós cujas entradas não mudaram.
Nós e arestas
Cada nó é uma tarefa (compile, bundle, test); cada aresta é uma dependência ("test precisa que compile termine primeiro"). O grafo é um DAG - um grafo acíclico direcionado - porque um build real não pode conter um ciclo.
O que o grafo permite
- Ordenação correta: uma tarefa executa apenas após suas dependências.
- Paralelismo: ramos independentes executam ao mesmo tempo.
- Builds incrementais: nós inalterados são pulados por completo.
Um pequeno exemplo
Se bundle depende de compile, e compile depende de generate-types, a ferramenta os executa nessa ordem - mas as tarefas compile de dois pacotes não relacionados não têm aresta entre si, então executam em paralelo.
Análise de afetados
Em um monorepo, o grafo responde "o que essa mudança afeta?" - você encontra os nós alterados e tudo que está a jusante deles, e então faz o build apenas desse subgrafo em vez do repositório inteiro.
Por que ciclos são proibidos
Um ciclo ("A precisa de B, B precisa de A") não tem ordem válida, então as ferramentas de build o rejeitam. Quando você recebe um erro de ciclo, geralmente significa que dois módulos importam um ao outro e a dependência precisa ser quebrada ou invertida.
Principais conclusões
- Um build graph é um DAG de tarefas e suas dependências.
- Ele permite ordenação correta, paralelismo e pulo incremental.
- É a base dos builds apenas do que foi afetado em monorepos.