Turborepo vs Lerna: qual ferramenta de monorepo para CI?
Elas resolvem metades diferentes do problema do monorepo: Turborepo faz cache e orquestra tasks, Lerna versiona e publica pacotes.
Turborepo é um task runner rápido com cache de computação e execuções apenas do que foi afetado para monorepos JS/TS. Lerna gerencia versionamento e publicação de pacotes de monorepo; o Lerna moderno delega a execução de tasks ao Nx, e muitos times combinam Lerna (publicação) com Turborepo (cache de tasks).
| Turborepo | Lerna | |
|---|---|---|
| Trabalho principal | Cache de tasks + orquestração | Versionamento + publicação |
| Cache de task/computação | Sim (local + remoto) | Via Nx (Lerna moderno) |
| Execuções afetadas/apenas-alteradas | Sim | Sim (via Nx) |
| Workflow de publicação | Não (externo) | Sim (recurso central) |
| Melhor para | Pipelines rápidos com cache | Releases coordenados |
No CI
Para velocidade de build/test, Turborepo é a ferramenta: faça cache das saídas de tasks e rode apenas os pacotes afetados para que código inalterado não seja reconstruído. O valor duradouro do Lerna é o versionamento e a publicação coordenados de muitos pacotes. Como eles se sobrepõem pouco, uma configuração comum é Turborepo para cache/orquestração e Lerna para releases. Se você só precisa de tasks de CI rápidos, Turborepo sozinho basta.
Acelere
Habilite o cache remoto do Turborepo entre jobs de CI e restrinja as tasks aos pacotes afetados - o maior ganho de velocidade isolado. Tasks que ainda rodam em um cache miss executam em runners de CI; runners gerenciados mais rápidos encurtam essas.
O veredito
Precisa de builds rápidos com cache e execuções apenas do que foi afetado: Turborepo. Precisa de versionamento e publicação coordenados: Lerna. Eles são complementares - muitos monorepos usam Turborepo para tasks e Lerna para releases.