Plugin ESLint
Next.js fournit un plugin ESLint, eslint-plugin-next
, déjà inclus dans la configuration de base, qui permet de détecter les problèmes courants dans une application Next.js.
Référence
Les ensembles de règles recommandés par les plugins ESLint suivants sont tous utilisés dans eslint-config-next
:
Cette configuration prendra le pas sur celle de next.config.js
.
Règles
L'ensemble complet des règles est le suivant :
Activé dans la config recommandée | Règle | Description |
---|---|---|
@next/next/google-font-display | Applique le comportement de font-display avec les polices Google. | |
@next/next/google-font-preconnect | S'assure que preconnect est utilisé avec les polices Google. | |
@next/next/inline-script-id | Applique l'attribut id sur les composants next/script avec du contenu en ligne. | |
@next/next/next-script-for-ga | Préfère le composant next/script lors de l'utilisation d'un script en ligne pour Google Analytics. | |
@next/next/no-assign-module-variable | Empêche l'assignation à la variable module . | |
@next/next/no-async-client-component | Empêche les Client Components d'être des fonctions asynchrones. | |
@next/next/no-before-interactive-script-outside-document | Empêche l'utilisation de la stratégie beforeInteractive de next/script en dehors de pages/_document.js . | |
@next/next/no-css-tags | Empêche les balises de feuille de style manuelles. | |
@next/next/no-document-import-in-page | Empêche l'importation de next/document en dehors de pages/_document.js . | |
@next/next/no-duplicate-head | Empêche l'utilisation en double de <Head> dans pages/_document.js . | |
@next/next/no-head-element | Empêche l'utilisation de l'élément <head> . | |
@next/next/no-head-import-in-document | Empêche l'utilisation de next/head dans pages/_document.js . | |
@next/next/no-html-link-for-pages | Empêche l'utilisation d'éléments <a> pour naviguer vers les pages internes de Next.js. | |
@next/next/no-img-element | Empêche l'utilisation de l'élément <img> en raison d'un LCP plus lent et d'une bande passante plus élevée. | |
@next/next/no-page-custom-font | Empêche les polices personnalisées spécifiques à une page. | |
@next/next/no-script-component-in-head | Empêche l'utilisation de next/script dans le composant next/head . | |
@next/next/no-styled-jsx-in-document | Empêche l'utilisation de styled-jsx dans pages/_document.js . | |
@next/next/no-sync-scripts | Empêche les scripts synchrones. | |
@next/next/no-title-in-document-head | Empêche l'utilisation de <title> avec le composant Head de next/document . | |
@next/next/no-typos | Empêche les fautes de frappe courantes dans les fonctions de récupération de données de Next.js | |
@next/next/no-unwanted-polyfillio | Empêche les polyfills en double de Polyfill.io. |
Nous recommandons d'utiliser une intégration appropriée pour voir les avertissements et les erreurs directement dans votre éditeur de code pendant le développement.
Exemples
Linting des répertoires et fichiers personnalisés
Par défaut, Next.js exécutera ESLint pour tous les fichiers des répertoires pages/
, app/
, components/
, lib/
et src/
. Cependant, vous pouvez spécifier les répertoires à l'aide de l'option dirs
dans la configuration eslint
de next.config.js
pour les builds de production :
De même, les flags --dir
et --file
peuvent être utilisés avec next lint
pour linter des répertoires et fichiers spécifiques :
Spécification d'un répertoire racine dans un monorepo
Si vous utilisez eslint-plugin-next
dans un projet où Next.js n'est pas installé dans votre répertoire racine (comme un monorepo), vous pouvez indiquer à eslint-plugin-next
où trouver votre application Next.js en utilisant la propriété settings
dans votre .eslintrc
:
rootDir
peut être un chemin (relatif ou absolu), un glob (c'est-à-dire "packages/*/"
) ou un tableau de chemins et/ou globs.
Désactivation du cache
Pour améliorer les performances, les informations des fichiers traités par ESLint sont mises en cache par défaut. Ceci est stocké dans .next/cache
ou dans votre répertoire de build défini. Si vous incluez des règles ESLint qui dépendent de plus que le contenu d'un seul fichier source et que vous devez désactiver le cache, utilisez le flag --no-cache
avec next lint
.
Désactivation des règles
Si vous souhaitez modifier ou désactiver certaines règles fournies par les plugins pris en charge (react
, react-hooks
, next
), vous pouvez les modifier directement en utilisant la propriété rules
dans votre .eslintrc
:
Avec Core Web Vitals
L'ensemble de règles next/core-web-vitals
est activé lorsque next lint
est exécuté pour la première fois et que l'option strict est sélectionnée.
next/core-web-vitals
met à jour eslint-plugin-next
pour signaler comme erreurs un certain nombre de règles qui sont des avertissements par défaut si elles affectent les Core Web Vitals.
Le point d'entrée
next/core-web-vitals
est automatiquement inclus pour les nouvelles applications créées avec Create Next App.
Avec TypeScript
En plus des règles ESLint de Next.js, create-next-app --typescript
ajoutera également des règles de lint spécifiques à TypeScript avec next/typescript
à votre configuration :
Ces règles sont basées sur plugin:@typescript-eslint/recommended
.
Voir typescript-eslint > Configs pour plus de détails.
Avec Prettier
ESLint inclut également des règles de formatage de code, qui peuvent entrer en conflit avec votre configuration existante de Prettier. Nous recommandons d'inclure eslint-config-prettier dans votre configuration ESLint pour faire fonctionner ESLint et Prettier ensemble.
Premièrement, installez la dépendance :
Ensuite, ajoutez prettier
à votre configuration ESLint existante :
Exécution du lint sur les fichiers mis en stage
Si vous souhaitez utiliser next lint
avec lint-staged pour exécuter le linter sur les fichiers git mis en stage, vous devrez ajouter ce qui suit au fichier .lintstagedrc.js
à la racine de votre projet afin de spécifier l'utilisation du flag --file
.
Désactivation du lint pendant les builds de production
Si vous ne souhaitez pas qu'ESLint s'exécute pendant next build
, vous pouvez définir l'option eslint.ignoreDuringBuilds
dans next.config.js
sur true
:
Migration d'une configuration existante
Si vous avez déjà configuré ESLint dans votre application, nous recommandons d'étendre directement ce plugin plutôt que d'inclure eslint-config-next
, sauf si certaines conditions sont remplies.
Ensemble de règles recommandé du plugin
Si les conditions suivantes sont vraies :
- Vous avez un ou plusieurs des plugins suivants déjà installés (soit séparément, soit via une configuration différente comme
airbnb
oureact-app
) :react
react-hooks
jsx-a11y
import
- Vous avez défini des
parserOptions
spécifiques qui diffèrent de la configuration de Babel dans Next.js (ce n'est pas recommandé sauf si vous avez personnalisé votre configuration Babel) - Vous avez installé
eslint-plugin-import
avec des résolveurs Node.js et/ou TypeScript définis pour gérer les imports
Alors nous recommandons soit de supprimer ces paramètres si vous préférez la façon dont ces propriétés ont été configurées dans eslint-config-next
, soit d'étendre directement le plugin ESLint de Next.js :
Le plugin peut être installé normalement dans votre projet sans avoir besoin d'exécuter next lint
:
Cela élimine le risque de collisions ou d'erreurs qui peuvent survenir en raison de l'importation du même plugin ou parseur à travers plusieurs configurations.
Configurations supplémentaires
Si vous utilisez déjà une configuration ESLint séparée et souhaitez inclure eslint-config-next
, assurez-vous qu'elle est étendue en dernier après les autres configurations. Par exemple :
La configuration next
gère déjà la définition des valeurs par défaut pour les propriétés parser
, plugins
et settings
. Il n'est pas nécessaire de redéclarer manuellement ces propriétés sauf si vous avez besoin d'une configuration différente pour votre cas d'utilisation.
Si vous incluez d'autres configurations partageables, vous devrez vous assurer que ces propriétés ne sont pas écrasées ou modifiées. Sinon, nous recommandons de supprimer les configurations qui partagent un comportement avec la configuration next
ou d'étendre directement depuis le plugin ESLint de Next.js comme mentionné ci-dessus.