Skip to content
Latchkey

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.

A minimal turbo.json
{
  "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.

Guias relacionados