Monorepo
Monorepo é uma estrutura de repositório que armazena código de múltiplos projetos ou pacotes relacionados em um único repositório Git, em vez de repositórios separados.
Monorepo facilita compartilhar código entre projetos relacionados, como um frontend e um backend que dividem tipos, componentes ou lógica de validação. Em vez de publicar pacotes separados e gerenciar versões entre repositórios diferentes, tudo vive junto, versionado em conjunto.
Ferramentas como Turborepo, Nx e workspaces do npm ou pnpm ajudam a organizar builds, testes e dependências dentro de um monorepo, evitando que um projeto grande demais fique lento para desenvolver.
Monorepo não é sinônimo de monolito
É comum confundir os dois conceitos, mas são independentes: um monorepo pode conter vários serviços e aplicações totalmente desacoplados entre si, apenas organizados no mesmo repositório de código.
Como funciona na prática
- Múltiplos projetos ou pacotes são organizados em pastas dentro de um único repositório
- Uma ferramenta de gerenciamento de workspace conecta as dependências entre os pacotes
- Código compartilhado, como tipos e componentes, fica acessível a todos os projetos
- Builds e testes podem rodar apenas nos pacotes afetados por uma mudança específica
- O versionamento e o histórico de todos os projetos ficam centralizados em um só lugar
Exemplo Prático
Uma equipe mantém o frontend em React e o backend em Node.js no mesmo monorepo, compartilhando os tipos TypeScript de request e response entre os dois projetos, sem precisar duplicar definições.
Por que isso é importante?
Monorepo importa porque reduz duplicação de código e simplifica a sincronização entre partes relacionadas de um sistema, especialmente em projetos fullstack com forte acoplamento entre frontend e backend.
Perguntas Frequentes (FAQ) sobre Monorepo
Monorepo funciona bem para times pequenos ou freelancers?
Pode funcionar bem quando há projetos realmente relacionados, como frontend e backend do mesmo produto, mesmo com uma equipe pequena.
Monorepo deixa o Git mais lento?
Em projetos muito grandes pode acontecer, mas ferramentas modernas de workspace e build incremental minimizam bastante esse impacto.