Plugin de ESLint
Next.js proporciona un plugin de ESLint, eslint-plugin-next
, incluido en la configuración base que permite detectar problemas comunes en una aplicación Next.js.
Referencia
Los conjuntos de reglas recomendados de los siguientes plugins de ESLint se utilizan dentro de eslint-config-next
:
Esto tendrá prioridad sobre la configuración de next.config.js
.
Reglas
El conjunto completo de reglas es el siguiente:
Habilitado en configuración recomendada | Regla | Descripción |
---|---|---|
@next/next/google-font-display | Exige el comportamiento de font-display con Google Fonts. | |
@next/next/google-font-preconnect | Asegura que se use preconnect con Google Fonts. | |
@next/next/inline-script-id | Exige el atributo id en componentes next/script con contenido inline. | |
@next/next/next-script-for-ga | Prefiere el componente next/script al usar scripts inline para Google Analytics. | |
@next/next/no-assign-module-variable | Previene la asignación a la variable module . | |
@next/next/no-async-client-component | Previene que los Componentes Cliente sean funciones asíncronas. | |
@next/next/no-before-interactive-script-outside-document | Previene el uso de la estrategia beforeInteractive de next/script fuera de pages/_document.js . | |
@next/next/no-css-tags | Previene etiquetas manuales de hojas de estilo. | |
@next/next/no-document-import-in-page | Previene importar next/document fuera de pages/_document.js . | |
@next/next/no-duplicate-head | Previene el uso duplicado de <Head> en pages/_document.js . | |
@next/next/no-head-element | Previene el uso del elemento <head> . | |
@next/next/no-head-import-in-document | Previene el uso de next/head en pages/_document.js . | |
@next/next/no-html-link-for-pages | Previene el uso de elementos <a> para navegar a páginas internas de Next.js. | |
@next/next/no-img-element | Previene el uso del elemento <img> debido a un LCP más lento y mayor ancho de banda. | |
@next/next/no-page-custom-font | Previene fuentes personalizadas solo para páginas. | |
@next/next/no-script-component-in-head | Previene el uso de next/script en el componente next/head . | |
@next/next/no-styled-jsx-in-document | Previene el uso de styled-jsx en pages/_document.js . | |
@next/next/no-sync-scripts | Previene scripts síncronos. | |
@next/next/no-title-in-document-head | Previene el uso de <title> con el componente Head de next/document . | |
@next/next/no-typos | Previene errores comunes en funciones de obtención de datos de Next.js | |
@next/next/no-unwanted-polyfillio | Previene polyfills duplicados de Polyfill.io. |
Recomendamos usar una integración adecuada para ver advertencias y errores directamente en tu editor de código durante el desarrollo.
Ejemplos
Linting en directorios y archivos personalizados
Por defecto, Next.js ejecutará ESLint para todos los archivos en los directorios pages/
, app/
, components/
, lib/
y src/
. Sin embargo, puedes especificar qué directorios usar con la opción dirs
en la configuración eslint
de next.config.js
para builds de producción:
De manera similar, se pueden usar las banderas --dir
y --file
con next lint
para linting en directorios y archivos específicos:
Especificando un directorio raíz en un monorepo
Si estás usando eslint-plugin-next
en un proyecto donde Next.js no está instalado en tu directorio raíz (como en un monorepo), puedes indicarle a eslint-plugin-next
dónde encontrar tu aplicación Next.js usando la propiedad settings
en tu .eslintrc
:
rootDir
puede ser una ruta (relativa o absoluta), un glob (ej. "packages/*/"
) o un array de rutas y/o globs.
Deshabilitando la caché
Para mejorar el rendimiento, la información de los archivos procesados por ESLint se almacena en caché por defecto. Esto se guarda en .next/cache
o en tu directorio de build definido. Si incluyes reglas de ESLint que dependen de más que el contenido de un solo archivo fuente y necesitas deshabilitar la caché, usa la bandera --no-cache
con next lint
.
Deshabilitando reglas
Si deseas modificar o deshabilitar cualquier regla proporcionada por los plugins soportados (react
, react-hooks
, next
), puedes cambiarlas directamente usando la propiedad rules
en tu .eslintrc
:
Con Core Web Vitals
El conjunto de reglas next/core-web-vitals
se habilita cuando next lint
se ejecuta por primera vez y se selecciona la opción strict.
next/core-web-vitals
actualiza eslint-plugin-next
para marcar como error varias reglas que son advertencias por defecto si afectan a Core Web Vitals.
El punto de entrada
next/core-web-vitals
se incluye automáticamente para nuevas aplicaciones creadas con Create Next App.
Con TypeScript
Además de las reglas de ESLint de Next.js, create-next-app --typescript
también agregará reglas específicas de TypeScript con next/typescript
a tu configuración:
Esas reglas están basadas en plugin:@typescript-eslint/recommended
.
Consulta typescript-eslint > Configs para más detalles.
Con Prettier
ESLint también incluye reglas de formato de código, que pueden entrar en conflicto con tu configuración existente de Prettier. Recomendamos incluir eslint-config-prettier en tu configuración de ESLint para que ESLint y Prettier trabajen juntos.
Primero, instala la dependencia:
Luego, agrega prettier
a tu configuración existente de ESLint:
Ejecutando lint en archivos staged
Si deseas usar next lint
con lint-staged para ejecutar el linter en archivos git staged, deberás agregar lo siguiente al archivo .lintstagedrc.js
en la raíz de tu proyecto para especificar el uso de la bandera --file
.
Deshabilitando linting durante builds de producción
Si no deseas que ESLint se ejecute durante next build
, puedes configurar la opción eslint.ignoreDuringBuilds
en next.config.js
a true
:
Migrando configuraciones existentes
Si ya tienes ESLint configurado en tu aplicación, recomendamos extender directamente desde este plugin en lugar de incluir eslint-config-next
a menos que se cumplan algunas condiciones.
Conjunto de reglas recomendado del plugin
Si las siguientes condiciones son verdaderas:
- Tienes uno o más de los siguientes plugins ya instalados (ya sea por separado o a través de una configuración diferente como
airbnb
oreact-app
):react
react-hooks
jsx-a11y
import
- Has definido
parserOptions
específicos que son diferentes a cómo está configurado Babel dentro de Next.js (esto no se recomienda a menos que hayas personalizado tu configuración de Babel) - Tienes
eslint-plugin-import
instalado con resolvers de Node.js y/o TypeScript definidos para manejar imports
Entonces recomendamos eliminar estas configuraciones si prefieres cómo se han configurado estas propiedades dentro de eslint-config-next
o extender directamente desde el plugin de ESLint de Next.js:
El plugin se puede instalar normalmente en tu proyecto sin necesidad de ejecutar next lint
:
Esto elimina el riesgo de colisiones o errores que pueden ocurrir al importar el mismo plugin o parser a través de múltiples configuraciones.
Configuraciones adicionales
Si ya utiliza una configuración separada de ESLint y desea incluir eslint-config-next
, asegúrese de que se extienda al final, después de otras configuraciones. Por ejemplo:
La configuración next
ya maneja los valores predeterminados para las propiedades parser
, plugins
y settings
. No es necesario volver a declarar manualmente ninguna de estas propiedades a menos que necesite una configuración diferente para su caso de uso.
Si incluye otras configuraciones compartibles, deberá asegurarse de que estas propiedades no se sobrescriban ni modifiquen. De lo contrario, recomendamos eliminar cualquier configuración que comparta comportamiento con la configuración next
o extender directamente desde el plugin ESLint de Next.js como se mencionó anteriormente.