Configuração Herdada
A Configuração Herdada centraliza a governança das ferramentas e regras de compilação na raiz do monorepo, permitindo que as aplicações subsequentes (downstream) estendam configurações compartilhadas sem duplicar definições.
1. Conceito Arquitetural e Visão Geral
Gerenciar o linting, compilação e formatação individualmente por pacote em um monorepo inevitavelmente leva ao desvio de ferramentas (tooling drift) e a um estilo de código inconsistente. Centralizar as configurações de ferramentas na raiz e fazer com que os workspaces individuais as estendam garante diretrizes estritas e unificadas de qualidade de código, reduzindo drasticamente o código repetitivo (boilerplate) de configuração de workspace.
Esse layout nos permite impor padrões estritos de workspace (como formatação de código no padrão Airbnb, verificações estritas do TypeScript e limites de pacotes seguros) em um arquivo de configuração de fonte única, mantendo todos os aplicativos e pacotes limpos e previsíveis.
2. Utilização Específica do Projeto
No tupynambalucas.dev, todas as ferramentas e configurações são centralmente orquestradas a partir da raiz:
A. Governança Unificada do ESLint
As regras do ESLint 9 (Configuração Plana/Flat Config) são centralizadas na raiz do monorepo. Pacotes individuais importam e estendem essa configuração base em seus arquivos eslint.config.js locais, garantindo que os limites de segurança, guias de estilo e padrões de qualidade de código sejam aplicados uniformemente em todos os projetos:
// Local eslint.config.js extending root Flat Config
import baseConfig from '../../eslint.config.js';
export default [
...baseConfig,
{
files: ['**/*.ts'],
rules: {
// Local package-specific overrides if necessary
},
},
];
B. Configurações em Cascata do TypeScript
Os arquivos tsconfig.json no nível da raiz definem o nível de rigor inicial:
strict: truenoImplicitAny: truenoFallthroughCasesInSwitch: true
Os workspaces estendem essas configurações compartilhadas por meio da propriedade extends, personalizando apenas bibliotecas específicas de tempo de execução ou ambientes de destino (como contextos Node.js vs. DOM/navegador):
// instance/apps/web/tsconfig.json
{
"extends": "../../../tsconfig.base.json",
"compilerOptions": {
"target": "ES2022",
"lib": ["DOM", "DOM.Iterable", "ES2022"]
}
}
C. Regras de Formatação Consolidadas
O estilo do código é governado globalmente por um único arquivo de configuração do Prettier na raiz do monorepo. As regras de formatação do Prettier são aplicadas de forma consistente a todos os arquivos TypeScript, JSON, CSS e Markdown em toda a estrutura do workspace, garantindo um layout completamente consistente sem regras ad-hoc.
D. Governança de Orquestração de Tarefas
O Turborepo conta com um arquivo turbo.json no nível da raiz para modelar o grafo de dependências do workspace. Isso unifica as definições de pipeline de tarefas (como build, lint, typecheck) e garante que as otimizações de cache e os pipelines de tarefas de destino se comportem de forma idêntica em cada workspace.