O que é o Turborepo? A rápida ferramenta de monorepo para JavaScript
O Turborepo é uma ferramenta de build de alto desempenho para monorepos JavaScript e TypeScript que faz cache das saídas de tarefas e as executa em paralelo com base em suas dependências.
O Turborepo acelera workflows de monorepo com uma promessa simples: nunca faça o mesmo trabalho duas vezes. Ele faz cache da saída de tarefas como build e test e, na próxima execução, reproduz os resultados em cache para qualquer coisa cujos inputs não mudaram, paralelizando o resto.
O que é o Turborepo
O Turborepo é uma ferramenta de orquestração de build para monorepos JS/TS. Você define pipelines de tarefas e suas dependências em um turbo.json, e o Turborepo as executa na ordem certa, em paralelo onde possível, fazendo cache da saída de cada tarefa para reutilização. Ele é intencionalmente leve e fácil de adotar de forma incremental.
Cache e pipelines
Cada tarefa declara seus inputs e outputs; o Turborepo faz o hash dos inputs e armazena os outputs em um cache. Se os mesmos inputs se repetirem, ele restaura a saída em cache em vez de reexecutar, incluindo os logs do console. Um cache remoto compartilha esses resultados entre máquinas, que é de onde vêm os maiores ganhos em CI.
Um exemplo de config
Um pipeline declara as dependências e outputs das tarefas.
{
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
}
}
}Papel em CI/CD
Em CI, o cache remoto do Turborepo permite que um pipeline pule a reconstrução e o reteste de pacotes cujos inputs estão inalterados, muitas vezes transformando um build completo do monorepo em uma restauração de cache quase instantânea. Como máquinas de CI recém-criadas começam frias, um cache remoto compartilhado é essencial para realizar os ganhos. Runners gerenciados que mantêm um cache quente mais auto-retry em falhas transitórias mantêm esses pipelines rápidos e confiáveis.
Alternativas
O Nx oferece cache semelhante além de um ecossistema de plugins mais rico e geração de código. O Bazel escala para repositórios poliglotas maiores com mais rigor. O Lerna foca em versionamento e publicação. O Turborepo é escolhido por sua simplicidade, velocidade e configuração mínima em monorepos JS/TS.
Principais conclusões
- O Turborepo faz cache das saídas de tarefas do monorepo e paraleliza as execuções.
- Inputs inalterados restauram resultados em cache em vez de reexecutar.
- Em CI, um cache remoto compartilhado é o que entrega os grandes ganhos de velocidade.