Aller au contenu

ESLint : installation

ESLint analyse le code JavaScript et TypeScript pour repérer les erreurs probables (variable inutilisée, comparaison douteuse, appel incorrect) et appliquer des règles de qualité. Il ne formate pas le code (rôle de Prettier). Cette rubrique décrit ESLint 9 et son format de configuration « flat config » (eslint.config.js). Les exemples utilisent des noms génériques.

Outil Rôle
ESLint Détecte les erreurs et les mauvaises pratiques (analyse)
Prettier Met en forme le code (indentation, guillemets, retours à la ligne)
TypeScript (tsc) Vérifie les types
Tests (Vitest, node --test) Vérifient le comportement

Node.js récent (ESLint 9 exige une version LTS actuelle : voir Node.js : installation).

Fenêtre de terminal
npm init @eslint/config@latest

L’assistant demande ce que l’on veut vérifier (syntaxe, problèmes, style), le type de modules (ES ou CommonJS), le framework (React, Vue, aucun), TypeScript et l’environnement (navigateur ou Node.js), puis installe les paquets et crée eslint.config.js.

Fenêtre de terminal
npm install -D eslint @eslint/js globals

eslint.config.js (avec "type": "module" dans package.json) :

import js from '@eslint/js';
import globals from 'globals';
export default [
{ ignores: ['dist/', 'coverage/', 'node_modules/'] },
js.configs.recommended,
{
files: ['**/*.js'],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
globals: { ...globals.node },
},
rules: {
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
eqeqeq: 'error',
'prefer-const': 'error',
},
},
];
Élément Rôle
ignores Fichiers et dossiers non analysés (équivalent de .eslintignore)
js.configs.recommended Jeu de règles recommandé par ESLint
files Fichiers auxquels s’applique le bloc
languageOptions Version du langage, type de modules, variables globales
rules Règles et leur niveau

La configuration est un tableau de blocs appliqués dans l’ordre : un bloc ultérieur remplace les réglages d’un bloc précédent pour les mêmes fichiers.

Fenêtre de terminal
npx eslint . # tout le projet
npx eslint src/ # un dossier
npx eslint src/app.js # un fichier
npx eslint . --fix # corrige automatiquement ce qui peut l'être
npx eslint . --max-warnings 0 # les avertissements font échouer (CI)
npx eslint . --cache # ne ré-analyse que les fichiers modifiés
npx eslint --print-config src/app.js # affiche la configuration effective d'un fichier

Sortie type :

/chemin/src/app.js
3:7 error 'inutilise' is assigned a value but never used no-unused-vars
8:5 error Expected '===' and instead saw '==' eqeqeq
✖ 2 problems (2 errors, 0 warnings)
1 error and 0 warnings potentially fixable with the `--fix` option.
Colonne Contenu
3:7 Ligne et colonne
error / warn Niveau
Message Description du problème
Dernier mot Nom de la règle (utile pour la désactiver ou chercher la documentation)
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}
}
Valeur Niveau Effet
'off' ou 0 Désactivée Aucun message
'warn' ou 1 Avertissement Affiché, code de sortie 0
'error' ou 2 Erreur Affiché, code de sortie 1

Une règle avec options : ['error', { option: valeur }].

// eslint-disable-next-line no-console
console.log('diagnostic');
/* eslint-disable no-console */
console.log('a');
console.log('b');
/* eslint-enable no-console */
const x = 1; // eslint-disable-line no-unused-vars

Toujours nommer la règle et expliquer la raison : un eslint-disable global masque de vraies erreurs. Pour détecter les désactivations devenues inutiles : npx eslint . --report-unused-disable-directives.

Chaque règle a sa page : eslint.org/docs/latest/rules/<nom-de-la-regle> (par exemple eqeqeq). Elle donne des exemples de code correct et incorrect, les options et si la règle est corrigeable avec --fix.

Fenêtre de terminal
npx eslint . --fix # corrections automatiques
npx eslint . -f stylish | tail -20 # reste à traiter

Sur un projet ancien, commencer avec un jeu de règles réduit (js.configs.recommended), passer les règles bruyantes en 'warn', puis durcir progressivement. Éviter de corriger des centaines de fichiers dans un commit mêlé à autre chose : un commit dédié (style: appliquer eslint --fix).

Symptôme Piste
Could not find config file eslint.config.js absent à la racine (ou dans un dossier parent)
ESLintRC … is no longer supported Ancien format .eslintrc.* : migrer vers eslint.config.js (voir Migration et dépannage)
'module' is not defined, 'process' is not defined Variables globales non déclarées : globals.node ou globals.browser dans languageOptions.globals
Parsing error: Unexpected token Syntaxe non prise en charge (TypeScript, JSX) : analyseur ou plugin approprié
Cannot find package '@eslint/js' npm install -D @eslint/js
ESLint analyse dist/ Ajouter ignores: ['dist/']
Lent sur un gros projet --cache

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Aucune propre à Ubuntu : ESLint s’exécute avec Node.js.