Commentaires
Les plugins sont en complément des loaders. Les plugins réalisent des actions plus complexes et font tout ce que les loaders ne peuvent pas faire comme l'optimisation de bundles, l'injection de variables de configuration (ou d'environnement) ou encore la gestion des assets.

Arthur, l'apprenti développeurTu serais pas en train de tout simplement traduire la documentation là ?
Démasqué. En réalité, je ne sais pas comment expliquer ça mieux que ce que la doc dit elle-même :p.

Les plugins, à contrario des loaders qui se mettent dans un objet "module", se mettent dans un tableau nommé "plugins". Il faut importer le plugin en amont puis l'instance dans ce tableau.

Voyons tout de suite le cas d'ESLint. ESLint est un Linter, c'est à dire un outil qui va nous aider à débuguer notre code JS et à respecter les bonnes pratiques.

Arthur, l'apprenti développeurIl faudrait bien que j'utilise ça dans mes prochains projets !
Alors justement, voyons son installation.
Quand on regarde la documentation (eslint-webpack-plugin), on voit qu'il est recommandé d'utiliser un plugin et non plus un loader pour ESLint.
Pour l'installer :
{"language":"shell","content":"npm install eslint-webpack-plugin eslint --save-dev","filename":""}


Ensuite, on va l'instancier dans webpack :
{"language":"text/javascript","content":"const path = require('path')\nconst ESLintPlugin = require('eslint-webpack-plugin');\n\nmodule.exports = {\n mode: 'development',\n entry: {\n app:'./src/app.js', \n },\n output: {\n filename:'[name].bundle.js',\n path: path.resolve(__dirname, 'public')\n },\n module: {\n rules: [\n {\n test: /\\.js$/,\n exclude: /node_modules/,\n use: {\n loader: \"babel-loader\",\n options: {\n presets: ['@babel/preset-env']\n }\n }\n }\n ]\n },\n plugins: [new ESLintPlugin(options)]\n}","filename":"webpack.config.js"}

Arthur, l'apprenti développeurMais c'est quoi le paramètre "options" ?
De la même manière que Babel, tu peux passer des paramètres à ESLint (tu retrouveras tous les paramètres de configuration possible sur la doc d'ESLint). Il faut alors définir un objet qui contient ces options, qu'on nomme "options" en général et qu'on passe au constructeur d'ESLint. Dans notre cas, on va pouvoir enlever ce paramètre pour qu'ESLint prenne les paramètres de base. Par contre, il faut créer un fichier de configuration de ESLint via la commande :

{"language":"shell","content":"npx eslint --init","filename":""}

Réponds aux questions qu'il te pose (on veut utiliser ESLint pour trouver les bugs, on n'utilise pas de framework, pas typescript, et on veut une sortie en JSON par exemple).
Et maintenant, on peut lancer npm run build.

Arthur, l'apprenti développeurRien n'a changé par rapport à d'habitude...
Tout à fait. Mais maintenant, introduis une erreur dans ton fichier app.js. Par exemple "let a = b". Relance npm run build...

Arthur, l'apprenti développeurUne erreur s'affiche ! Avec une explication de l'erreur.
En effet ! C'est ESLint qui affiche ça. Si tu enlèves le plugin et que tu relances npm run build, dans ce cas aucune erreur ne va s'afficher dans le terminal.
Tu as compris ?

Arthur, l'apprenti développeurTout à fait.
Super. Alors maintenant, passons à un dernier point : webpack-dev-server J'ai terminé cette partie
Demander de l'assistance