Pular para o conteúdo principal

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: true
  • noImplicitAny: true
  • noFallthroughCasesInSwitch: 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.