Installer rapidement eslint 9 sur un projet node
May 31, 2024
Node
Je vous partage ici mon retour d'expérience sur l'ajout de la version 9 d'eslint sur un projet node
Nous allons dans ce post voir comment mettre en place rapidement le linter eslint version 9 sur un projet javascript nodejs.
Le projet est écrit en nodejs (module commonJs) sans typescript
- Installation des packages nécessaires
Si vous utilisez yarn adapter les commandes ci-dessous en utilisant yarn add -D <nom_package>
npm install --dev eslint npm install --dev eslint-config-standard npm install --dev eslint-plugin-import npm install --dev eslint-plugin-n npm install --dev eslint-plugin-promise npm install --dev globals |
- Configuration
Lancer la commande ci-dessous pour générer le fichier de config eslint.config.js
npm init @eslint/config@latest -- --config eslint-config-standard |
Remplacer le fichier de config par le contenu ci-dessous qui permet de mettre en place la configuration standard et de désactiver quelques règles selon votre convenance
import js from "@eslint/js"; import globals from "globals"; import nodePlugin from "eslint-plugin-n"; import path from 'node:path' import url from 'node:url' import { FlatCompat } from '@eslint/eslintrc'
export default [ ...(new FlatCompat({baseDirectory: path.dirname(url.fileURLToPath(import.meta.url))}).extends('eslint-config-standard')), js.configs.recommended, ...nodePlugin.configs["flat/mixed-esm-and-cjs"], { rules: { semi: ["warn", "always"], quotes: ["warn", "single"], "n/no-missing-require": ["off"], eqeqeq: "off", "quote-props": "warn", "no-multiple-empty-lines": "warn", "camelcase": "warn" } }, { languageOptions: { sourceType: "common", globals: { ...globals.node } }, files: ["src/**/*.js"], ignores: [ "node_modules", "**/node_modules", "**/*.config.mjs", "!**/eslint.config.mjs" ] } ]; |
- Ajouter la commande dans le fichier package.json
Ci-dessous nous ajoutons la commande lint permettant de lancer le linter dans le répertoire src de notre projet
"scripts": { "lint": " ./node_modules/.bin/eslint src" }, |
Pour lancer le linter, faites :
Ci-dessous une version avec plus de plugin installé
import js from '@eslint/js'; import globals from 'globals'; import nodePlugin from 'eslint-plugin-n'; import pluginPromise from 'eslint-plugin-promise'; import path from 'node:path'; import url from 'node:url'; import {FlatCompat} from '@eslint/eslintrc'; import sonarjs from 'eslint-plugin-sonarjs';
export default [ ...new FlatCompat({ baseDirectory: path.dirname(url.fileURLToPath(import.meta.url)) }).extends('eslint-config-standard'), js.configs.recommended, ...nodePlugin.configs['flat/mixed-esm-and-cjs'], pluginPromise.configs['flat/recommended'], sonarjs.configs.recommended, { rules: { semi: 'off', quotes: 'off', "key-spacing": "off", } }, { languageOptions: { sourceType: 'commonjs', globals: { ...globals.node } }, files: ['src/**/*.js'], ignores: [ 'node_modules', '**/node_modules', '**/*.config.mjs', '!**/eslint.config.mjs' ] } ]; |