- Publicado el
Cómo acelerar ESLint en proyectos Next.js con Flat Config y GitLab CI
- Autores
Cómo acelerar ESLint en proyectos Next.js con Flat Config y GitLab CI
Este artículo se centra en GitLab y muestra cómo conseguir que ESLint sea rápido y predecible en un proyecto de Next.js + TypeScript mediante el formato moderno flat config.
Vamos a:
- Usar exclusiones globales para omitir carpetas voluminosas o generadas.
- Mantener una tarea sencilla de GitLab CI que ejecute
npm run lint.
¿Por qué Flat Config?
El sistema flat config es el formato de configuración de nueva generación de ESLint. Sustituye a .eslintrc y está diseñado para ser más rápido, claro y predecible.
Este sistema:
- Funciona de forma nativa con módulos ES.
- Simplifica mucho las exclusiones globales y los patrones de archivos específicos.
- Se integra fácilmente con Next.js (
next lintlo admite de forma predeterminada).
Exclusiones globales (ignores en el nivel superior)
Define un bloque ignores en el nivel superior para que ESLint nunca tenga en cuenta directorios voluminosos o generados:
// eslint.config.mjs (flat config)
/** @type {import("eslint").Linter.Config[]} */
export default [
js.configs.recommended,
{
// ESLint already ignores ["**/node_modules/", ".git/"] by default, reference: https://eslint.org/docs/latest/use/configure/configuration-files#globally-ignoring-files-with-ignores
// so you do NOT need to list them here.
// The folders below are project-specific outputs we also want to ignore globally.
ignores: ['.next/**', 'out/**', 'dist/**', 'build/**', 'coverage/**'],
},
{ ... }, // ... other configuration object, inherit global ignores
]
Qué son estas carpetas y por qué ignorarlas
- "node_modules/" → dependencias (ESLint las ignora de forma predeterminada).
- ".git/" → metadatos del control de versiones (ESLint los ignora de forma predeterminada).
- ".next/" → salida de compilación de Next.js (servidor/cliente), generada.
- "out/" → salida de exportación estática, generada.
- "dist/", "build/" → salida compilada o empaquetada, generada.
- "coverage/" → informes de cobertura de pruebas, generados.
Al excluirlas, ESLint evita recorrer archivos irrelevantes, lo que acelera las ejecuciones del análisis.
Scripts de package.json
Mantén los scripts sencillos y adecuados para CI:
{
"scripts": {
"lint": "next lint"
}
}
next lintintegra automáticamente ESLint con valores predeterminados razonables para Next.js y respeta tu configuración flat config.
GitLab CI: Sencillo y rápido
Esta es una configuración mínima de GitLab CI que instala las dependencias y ejecuta ESLint:
# .gitlab-ci.yml
stages:
- lint
lint:
stage: lint
image: node:20-alpine
script:
- npm ci
- npm run lint
Notas
npm cigarantiza instalaciones reproducibles (basadas en tu archivo de bloqueo).- La tarea de análisis sigue siendo ligera y se apoya por completo en tu configuración flat config de ESLint para ganar velocidad. Eso es todo, una configuración de ESLint clara, rápida y fácil de mantener para tu proyecto Next.js en GitLab CI.