Repositório destinado a estudos de comportamento de aplicacões como Monorepo.
- Reakit
- Jest
- React
- Docz
- Babel
- Angular
Monorepo é uma estratégia de desenvolvimento de software onde o código de várias aplicações são agrupadas em um mesmo repositório.
- Código reunido no mesmo Pull Request ( back e front )
- Compartilhamento de código
- Exemplo: Axios, SWR, Funçoes de validacao
- Compartilhamento de bibliotecas
- Ex: Para uma lib de interface de criacao prorpria da empresa, pode ser compartilhada facilmente sem a necessidade de instalar uma nova dependencia em cada projeto, e ter correr o risco de esquecer de atualizar um projeto e nao o outro.
- Possibilidade de um versionamento unificado
- Ao ser lancado uma versao de um modulo, todos os outros estaram atualizados
- Gestão de depencias
- Uma unica pasta node_modules
- Facil inicializacao para novos no time
- nao precisa baixar 'n' repositorios cada um com seu env, ou passar o dia baixando e instalando dependencias
- Integração contínua
- você pode executar o build de todas as aplicações e caso uma biblioteca seja alterada sem precisar criar links entre elas durante os pipelines. Com isso, todas as aplicações sempre terão as últimas versões das bibliotecas, e você consegue identificar caso uma alteração em uma biblioteca quebre uma aplicação.
- Existe ainda ferramentas que te dizem exatamente quais aplicações ou bibliotecas foram afetadas pela sua alteração, e executam o processo de build somente para o que foi afetado ( NX → https://nx.dev )
- Liberdade de criacao
- a liberdade de criar um novo projeto sem precisar criar repositórios e pedir pro time inteiro cloná-lo também foi bem interessante.
- Cultura, sair do conforto de multirepos
- Controle de acesso / Segurança
- aceitar que todo mundo do seu time tem acesso a tudo, e que todo mundo pode alterar tudo desde que seja aprovado no processo de PR.
- Complexidade para DevOps
- Como você só tem um repositório, os pipelines de CI e CD se tornam um pouco mais complexos porque eles precisam buildar não só uma aplicação, mas todas as aplicações que determinada alteração afeta.
Workspaces é uma funcionalidade do Yarn que permite agrupar múltiplas aplicações em um único repositório. Ele é o grande facilitador para a criação de Monorepos. Basta informar quais são os diretórios no arquivo package.json
para que o Yarn seja capaz de instalar as dependências e linkar as aplicações locais.
- Lerna
- PNPM - https://pnpm.js.org/en/