Exercices Webpack

1 - Utilisation de bibliothèques externes

Installer la bibliothèque moment avec npm ou Yarn en dependencies

(Notons que cette bibliothèque n'est pas recommandée pour des nouveaux projets)

Dans le code de horloge.js, importer moment :

import moment from 'moment';

(Notons que cet import fonctionne avec la même convention que dans Node.js, si vous regardez dans node_modules/moment vous verrez également que moment n'est pas exportée en ESM)

puis remplacer la ligne :

this._container.innerText = now.toLocaleTimeString();

par :

this._container.innerText = moment(now).format('HH:mm:ss');

Le code fonctionne toujours.

2 - Config au format JSON

Créer un fichier src/js/config.json et y ajouter la config suivante :

{
  "timeFormat": "HH:mm:ss"
}

Dans horloge.js importer cette config :

import config from './config';

Remarquez que config est un objet et remplacer la ligne où l'heure est formattée par la valeur présente dans la config.

3 - Config au format JSON5

Remplacer la config par :

{
  "timeFormat": "HH:mm:ss" // le format de l'horloge
}

Webpack supporte les fichiers .json par défaut et les transforme en objet.

Le problème du JSON :

  • pas de commentaires,
  • pas de single quotes,
  • les clés entre quotes,
  • ...

Le projet JSON5 propose une évolution qui contourne ces limitations : https://json5.org/

Installer le paquet npm json5 en devDependencies

Modifier la config pour autoriser les fichiers .json5 en vous inspirant de l'exemple suivant : https://github.com/webpack/webpack/tree/main/examples/custom-json-modules

Vous devrez ajouter un fichier .d.ts dans le répertoire types pour supporter l'extension .json5 en TypeScript.

4 - Banner Plugin

En suivant la doc : https://webpack.js.org/plugins/banner-plugin/

Charger le plugin banner dans la liste des plugins comme ceci : new webpack.BannerPlugin('Copyright STMicroelectronics')

Un commentaire devrait apparaitre en début de bundle.

5 - CSS Loader et Style Loader

Créer un fichier src/css/app.css contenant :

body {
  margin: 0;
  width: 100vh;
  height: 100vh;
  display: flex;
  font-size: 3em;
}

.horloge {
  margin: auto;
}

Installer les loaders css-loader et style-loader puis suivre la doc de style-loader pour charger le CSS

https://webpack.js.org/loaders/style-loader/

Dans index.js il faut importer app.css comme ceci :

import '../css/app.css`

6 - MiniCssExtractPlugin

Suivre la doc suivante pour remplacer style-loader qui écrit le css dans une balise style, par un fichier .css externe qui chargera dans une balise link :

https://webpack.js.org/plugins/mini-css-extract-plugin/

Ne le faire que si le mode est production