![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
Évidemment ! Alors :
- Le mode précise comment Webpack doit gérer la compilation. On peut lui indiquer soit "production", soit "development". En production, le code généré sera adapté à un site publié en ligne. Il sera optimisé et minifié. En mode development, le code ne sera pas autant optimisé et il sera alors plus simple de déboguer.
- Le point d'entrée correspond au main de npm dans le package.json. C'est le fichier qui devra être compilé par webpack et qui contient les dépendances de chaque autre fichier de l'application.
- Le point de sortie, c'est le fichier qui sera généré par webpack. On peut préciser son emplacement et son nom.
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
On utilise un objet JS, comme suit :
split_password2 : "R"
Pour le 3, voici l'indice : Stored XSS, Reflected XSS, _ _ _ XSS
https://training-dev.fr/_ _ _
Pour le 3, voici l'indice : Stored XSS, Reflected XSS, _ _ _ XSS
https://training-dev.fr/_ _ _
{"language":"text/javascript","content":"module.exports = {\n\tmode: , // Mode\n \tentry: , // Point d'entrée\n \toutput: , // Point de sortie\n}","filename":"webpack.config.js"}
Commençons donc à paramétrer webpack. Moi j'aime que mon dossier où il a les assets et le contenu accessible par les internautes soit nommé "public", pas "dist".
Mon point d'entrée quant à lui sera nommé "app.js".
Je dois donc configurer mon webpack.config.js comme suit :
{"language":"text/javascript","content":"module.exports = {\n\tmode: 'development',\n \tentry: './src/app.js',\n \toutput: {\n \t\tfilename:'bundle.js',\n \tpath: __dirname + '/public'\n \t}\n}","filename":"webpack.config.js"}
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
Tu as raison. Output est un objet qui prend deux entrées (parfois même +) :
filename : le nom du fichier qui sera généré
path : le dossier où il sera généré
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
Oui, enfin j'ai modifié ma structure et modifié ma configuration en conséquence, pas dans le sens inverse :p.
Du coup, après avoir lancé la commande npm run build, j'obtiens le résultat suivant :
![](https://antoine-creuzet.fr/img/tutorials/webpack_part2_1.png)
Tout a fonctionné comme prévu !
Il faut savoir que tu trouveras couramment sur le web une autre façon d'écrire notre fichier de config. De la façon suivante :
{"language":"text/javascript","content":"const path = require('path')\nmodule.exports = {\n\tmode: 'development',\n \tentry: './src/app.js',\n \toutput: {\n \t\tfilename:'bundle.js',\n \tpath: path.resolve(__dirname, 'public')\n \t}\n}","filename":"webpack.config.js"}
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
C'est une librairie fournie avec NodeJS qui permet la manipulation des fichiers. Elle est très utilisée.
Bon, as-tu tout compris jusqu'ici ?
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
Tu as des questions ?
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
Et tu as bien raison. Webpack nous conseille de créer un point d'entrée par page HTML qui appellent un script.
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
Tout à fait. On peut transformer "entry" en un tableau et faire comme suit :
{"language":"text/javascript","content":"const path = require('path')\nmodule.exports = {\n\tmode: 'development',\n \tentry: ['./src/app.js', './src/products.js'],\n \toutput: {\n \t\tfilename:'bundle.js',\n \tpath: path.resolve(__dirname, 'public')\n \t}\n}","filename":"webpack.config.js"}
Ou même mieux, transformer en un objet et donner des noms à chacun des scripts :
{"language":"text/javascript","content":"const path = require('path')\nmodule.exports = {\n\tmode: 'development',\n \tentry: {\n \t\tapp:'./src/app.js', \n \t\tproducts: './src/products.js'\n \t},\n \toutput: {\n \t\tfilename:'bundle.js',\n \tpath: path.resolve(__dirname, 'public')\n \t}\n}","filename":"webpack.config.js"}
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
Hé bien en premier lieu, je te laisse essayer de compiler avec le fichier de configuration juste au dessus.
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
C'est normal. Tu es en train de dire à webpack : je veux 2 points d'entrée, mais 1 seul point de sortie. Bilan : erreur.
Il faut donc créer des points de sortie différents. Seulement, on ne précise pas un nom pour chaque point de sortie comme on le fait avec les points d'entrée. On va simplement se baser sur le nom donné à nos scripts en point d'entrée et l'ajouter dynamiquement comme suit :
{"language":"text/javascript","content":"const path = require('path')\nmodule.exports = {\n\tmode: 'development',\n \tentry: {\n \t\tapp:'./src/app.js', \n \t\tproducts: './src/products.js'\n \t},\n \toutput: {\n \t\tfilename:'[name].bundle.js',\n \tpath: path.resolve(__dirname, 'public')\n \t}\n}","filename":"webpack.config.js"}
Comme tu peux le voir, en utilisant [name], on va pouvoir créer le un fichier qui aura pour nom le nom donné à nos scripts (suivi de .bundle.js parce que je l'ai décidé ainsi, mais ce n'est aucunement obligatoire).
Pratique non ? Si tu lances npm run build, tu auras donc 2 fichiers de généré, chacun avec ses dépendances, que tu pourras ajouter respectivement dans index.html et products.html ;)
![Arthur, l'apprenti développeur](/Img/Shared/arthur.png)
Génial. On va donc passer à la suite : les loaders. Ceux-ci vont nous permettre de gérer les fichiers particuliers (SASS, Vue...)
J'ai terminé cette partie