Configuração do ESLint para Next.js
Configure o ESLint com o formato de configuração plana para um projeto Next.js usando predefinições integradas.
Busque em todas as páginas da documentação
Configure o ESLint com o formato de configuração plana para um projeto Next.js usando predefinições integradas.
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥
Cartão de receita de referência rápida - pronto para copiar e colar.
# Instale o ESLint (incluído com create-next-app)
npm install --save-dev eslint eslint-config-next
# Execute o linting via CLI do Next.js
npx next lint
# Execute o linting e corrija automaticamente
npx next lint --fix
# Execute o linting em diretórios específicos
npx next lint --dir src --dir appQuando usar isso: Todo projeto Next.js deve ter o ESLint configurado desde o primeiro dia.
// eslint.config.mjs
import { FlatCompat } from "@eslint/eslintrc";
import { dirname } from "path";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
});
const eslintConfig = [
...compat.extends("next/core-web-vitals", "next/typescript"),
{
rules: {
// Personalize as regras aqui
"@typescript-eslint/no-unused-vars": [
"error",
{ argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
],
"react/no-unescaped-entities": "off",
},
},
{
ignores: [
"node_modules/",
".next/",
"out/",
"public/",
"coverage/",
],
},
];
export default eslintConfig;O que isso demonstra:
eslint.config.mjsFlatCompat para unir configurações do Next.js (que ainda usam o formato legado) à configuração plananext/core-web-vitals (inclui regras de React, hooks e importação) e next/typescriptnpx next lintnext/core-web-vitals agrupa eslint-plugin-react, eslint-plugin-react-hooks, eslint-plugin-next e eslint-plugin-import com padrões rigorososnext/typescript adiciona regras do @typescript-eslint/eslint-plugin ajustadas para Next.jseslint.config.mjs) em vez do formato legado .eslintrcFlatCompat é uma ponte que permite usar configurações no estilo extends legado dentro da configuração plana - necessário porque as predefinições do Next.js ainda não foram totalmente migradasESLint Autônomo (sem next lint):
# Execute o ESLint diretamente
npx eslint . --fix
# Ou via script package.json{
"scripts": {
"lint": "next lint",
"lint:fix": "next lint --fix",
"lint:strict": "next lint --strict"
}
}Modo Estrito (trata avisos como erros):
npx next lint --strictIgnorando arquivos:
// Em eslint.config.mjs - bloco de ignores
{
ignores: [
"**/*.config.js",
"**/*.config.mjs",
"migrations/",
"generated/",
],
}# A predefinição next/typescript cuida disso automaticamente:
# - @typescript-eslint/parser é configurado
# - Regras cientes de TypeScript são habilitadas
# - Arquivos .ts e .tsx são incluídos por padrãoCoisas que vão te pegar. Cada armadilha inclui o que dá errado, por que acontece e a correção.
Configuração plana não detectada - Se o ESLint ignorar seu eslint.config.mjs, você pode ter um arquivo .eslintrc.* sobrando. O ESLint 9 prefere configuração plana, mas volta para o legado se ambos existirem. Correção: Exclua todos os arquivos .eslintrc.* ao usar configuração plana.
Primeira execução solicita configuração - Executar npx next lint pela primeira vez exibe um assistente de configuração. Correção: Escolha "Strict" para next/core-web-vitals ou crie o arquivo de configuração manualmente com antecedência.
Ignores devem ser um objeto separado - Na configuração plana, o array ignores só funciona como um ignore global quando é a única chave em seu objeto de configuração. Misturar ignores com rules no mesmo objeto o torna um filtro, não um ignore global. Correção: Sempre coloque ignores globais em seu próprio objeto { ignores: [...] }.
Desempenho em projetos grandes - npx next lint apenas faz o lint de app/, pages/, components/, lib/ e src/ por padrão. Diretórios personalizados precisam de --dir. Correção: Adicione flags --dir ou configure eslint.dirs em next.config.js.
Outras maneiras de resolver o mesmo problema - e quando cada uma é a melhor escolha.
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Biome | Você quer uma única ferramenta rápida para linting e formatação | Você precisa do ecossistema completo de plugins ESLint |
oxlint | Você quer linting extremamente rápido escrito em Rust | Você precisa de regras personalizadas ou específicas do Next.js |
CLI do eslint diretamente | Você precisa de controle total sobre quais arquivos são verificados | Você quer padrões padrão cientes do Next.js |
next/core-web-vitals, next/typescript) ainda usam o formato extends legado internamente.FlatCompat une essas configurações legadas à configuração plana do ESLint 9.FlatCompat não será mais necessário.next/core-web-vitals agrupa regras de React, hooks, importação e específicas do Next.js com padrões rigorosos.next/typescript adiciona regras do @typescript-eslint/eslint-plugin ajustadas para Next.js.eslint.config.mjs)..eslintrc.* quanto eslint.config.mjs, o ESLint voltará para o arquivo legado..eslintrc.* ao migrar para configuração plana para evitar confusão.# O Next.js apenas faz o lint de app/, pages/, components/, lib/, src/ por padrão
npx next lint --dir src --dir utils --dir services"warn" agora falhará na execução do lint.ignores só funciona como um ignore global quando é a única chave em seu objeto de configuração.ignores com rules no mesmo objeto, ele age como um filtro de arquivo, não um ignore global.{ ignores: [...] } separado."@typescript-eslint/no-unused-vars": [
"error",
{ argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
]Prefira parâmetros não utilizados com _ e eles serão ignorados.
__filename ou __dirname.fileURLToPath(import.meta.url) e dirname() os recriam.FlatCompat requer baseDirectory para resolver caminhos de configuração relativos.eslint.config.mjs é JavaScript puro, não TypeScript.// @ts-check no topo e usar anotações JSDoc para verificação básica de tipo.eslint.config.ts com suporte experimental de configuração TypeScript no ESLint 9.eslint.config.mjs antes de executar npx next lint.next/core-web-vitals.# ESLint direto (ignora os padrões de diretório do Next.js)
npx eslint . --fix
# next lint (respeita os padrões de diretório do Next.js)
npx next lint --fixUse npx eslint . quando precisar de controle total sobre quais arquivos são verificados.
next/typescript configura o analisador TypeScript automaticamente.@/* definidos em tsconfig.json são resolvidos pelo analisador.Revisado por Chris St. John·Última atualização: 16 de jul. de 2026
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥