Se você já ouviu falar em monorepos, mas ainda não sabe por onde começar ou quais são suas vantagens, este guia foi feito para você. Vamos explorar de maneira simples e prática o que é um monorepo, como ele se diferencia de outras abordagens e como configurar um usando Yarn Workspaces.

O que é um Monorepo?

Um monorepo é um único repositório que armazena múltiplos projetos distintos, que podem ser utilizados de forma independente ou combinados em aplicações maiores.

A principal vantagem é que o código está disponível em um só lugar na sua versão mais atualizada.

Monorepos vs. Polyrepos

A abordagem “polyrepo” é a mais comum no desenvolvimento de software: cada projeto tem seu próprio repositório. Isso pode ser funcional, mas nem sempre eficiente.

No monorepo, por outro lado, o acesso ao código é instantâneo e unificado, permitindo maior colaboração e reutilização entre projetos.

Monorepos não são Monolitos

É importante destacar que monorepos não são sinônimos de monolitos.

  • Monorepo: Projetos separados, mas organizados em um único repositório. Temos pacotes completamente isolados uns dos outros.
  • Monolito: Um monolito é um grupo de projetos que compoem um grande projeto.

Configurando Yarn Workspaces em um Monorepo

Primeiro, inicialize seu projeto com Yarn:

yarn init -y

Em seguida, configure o package.json para suportar Yarn Workspaces:

{
  "private": true,
  "workspaces": ["packages/*"]
}

Nota: A propriedade private: true é obrigatória. Isso garante que o monorepo não será publicado acidentalmente como um pacote público.

Criando pacotes no Monorepo

Dentro do diretório do projeto, crie uma pasta chamada packages para armazenar seus pacotes:

mkdir packages
mkdir packages/package-01
mkdir packages/package-02

Crie um arquivo package.json dentro da pasta de cada pacote, você pode fazer isso usando o seguinte comando:

yarn init -y

Volte para o diretório root e instale as dependências:

yarn install

Observe que o monorepo terá apenas um arquivo yarn.lock, centralizando a gestão de dependências.

Gerenciando Pacotes no Monorepo com Yarn

Para rodar um comando em um pacote específico, use:

yarn workspace package-01 start  

Precisa rodar um comando em todos os pacotes do monorepo? Simples:

yarn workspaces run start  

Instalando Dependências

Para adicionar uma dependência em um pacote específico:

yarn workspace package-01 add react

Para adicionar uma dependência ao root do monorepo:

yarn add lodash -W

Usando Pacotes Internos do Monorepo

Para utilizar um pacote dentro de outro, instale a mesma versão especificada no package.json:

yarn workspace package-01 add package-02 --peer

Isso criará um link automático no monorepo, facilitando a integração.

Conclusão

Monorepos oferecem colaboração eficiente, gestão centralizada de dependências e maior produtividade para equipes que trabalham em múltiplos projetos. Com Yarn Workspaces, configurar e gerenciar um monorepo se torna uma tarefa simples e escalável.

Agora que você conhece os fundamentos, está pronto para começar a utilizar essa poderosa abordagem em seus projetos!