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.
ESLint, Prettier, tests : qui fait quoi
Section intitulée « ESLint, Prettier, tests : qui fait quoi »| 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 |
Prérequis
Section intitulée « Prérequis »Node.js récent (ESLint 9 exige une version LTS actuelle : voir Node.js : installation).
Installer avec l’assistant
Section intitulée « Installer avec l’assistant »npm init @eslint/config@latestL’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.
Installer à la main
Section intitulée « Installer à la main »npm install -D eslint @eslint/js globalseslint.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.
Lancer ESLint
Section intitulée « Lancer ESLint »npx eslint . # tout le projetnpx eslint src/ # un dossiernpx eslint src/app.js # un fichiernpx eslint . --fix # corrige automatiquement ce qui peut l'êtrenpx eslint . --max-warnings 0 # les avertissements font échouer (CI)npx eslint . --cache # ne ré-analyse que les fichiers modifiésnpx eslint --print-config src/app.js # affiche la configuration effective d'un fichierSortie 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 package.json
Section intitulée « Scripts package.json »{ "scripts": { "lint": "eslint .", "lint:fix": "eslint . --fix" }}Niveaux d’une règle
Section intitulée « Niveaux d’une règle »| 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 }].
Désactiver une règle localement
Section intitulée « Désactiver une règle localement »// eslint-disable-next-line no-consoleconsole.log('diagnostic');
/* eslint-disable no-console */console.log('a');console.log('b');/* eslint-enable no-console */
const x = 1; // eslint-disable-line no-unused-varsToujours 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.
Chercher la documentation d’une règle
Section intitulée « Chercher la documentation d’une règle »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.
Premier passage sur un projet existant
Section intitulée « Premier passage sur un projet existant »npx eslint . --fix # corrections automatiquesnpx eslint . -f stylish | tail -20 # reste à traiterSur 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).
Dépannage
Section intitulée « Dépannage »| 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.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Documentation : eslint.org
- Suite : Configuration