Estrutura do Monorepo
Entendendo a estrutura e flexibilidade do Turborepo.
Utilizamos o Turborepo para gerenciar nosso monorepo. Essa estrutura nos permite hospedar várias aplicações e pacotes compartilhados em um único repositório Git, facilitando o compartilhamento de código e commits atômicos.
Estrutura de Diretórios
.
├── apps/
│ ├── accounts/ # Aplicação Angular para gerenciamento de usuários
│ ├── api/ # Aplicação backend NestJS
│ ├── docs/ # Site de documentação (Next.js)
│ ├── site/ # Aplicação do site principal (React/Vite)
│ └── web/ # Aplicação web (React/Vite)
├── packages/
│ ├── eslint-config/ # Configurações compartilhadas do ESLint
│ ├── numeracao-digital/ # Pacote de numeração digital
│ ├── shared/ # Tipos compartilhados, DTOs e utilitários
│ ├── typescript-config/ # TSConfigs compartilhados
│ └── ui/ # Biblioteca de componentes UI compartilhada
├── package.json # Configuração raiz e scripts
└── turbo.json # Configuração do pipeline TurborepoPrincipais Benefícios
- Código Compartilhado: O diretório
packages/sharednos permite definir interfaces TypeScript (DTOs, Entidades) uma única vez e consumi-las tanto na API quanto nas aplicações Frontend. Isso garante que o frontend esteja sempre sincronizado com as estruturas de dados do backend. - Ferramentas Unificadas: Utilizamos um único arquivo de lock (
pnpm-lock.yaml) e configurações consistentes para ESLint, Prettier e TypeScript em todos os projetos. - Cache: O Turborepo armazena em cache os resultados das builds. Se você não alterou um pacote, o Turbo não o reconstruirá, acelerando significativamente os pipelines de CI/CD.
- Gerenciamento de Dependências: Os workspaces do
pnpmnos permitem vincular pacotes localmente. Alterações empackages/uisão refletidas instantaneamente emapps/docssem a necessidade de um ciclo de publicação/instalação.
Workspaces
Este projeto está configurado como um workspace pnpm. O arquivo pnpm-workspace.yaml define os locais dos pacotes do workspace:
packages:
- 'apps/*'
- 'packages/*'