Blog

Webpack, React et ES6

Dans ce petit tutorial, nous allons mettre en place un projet React en ECMAScript 6 à l’aide de Webpack et de Babel.

La structure du projet

L’objectif sera donc d’obtenir un environnement de développement qui transpilera automatiquement notre code ES6 en ES5, résoudra les dépendances de nos fichiers, gerera un serveur statique, l’auto-reload de notre navigateur et enfin nous permettra l’utilisation de préprocesseurs CSS (ici SASS).

La structure de notre projet (Un repository github avec le code du tutorial):

Et les différents fichiers que j’utilise pour vérifier le bon fonctionnement de notre environnement :

app.jsx

home.jsx

index.html

styles.scss

Les dépendances

Bon pas de secret, on va utiliser npm.

Pour Webpack

Pour React

Vous noterez que nous utilisons une version release candidate de React. Celle-ci apporte un détail plus que notable pour les utilisateurs d’ES6 que nous sommes : l’apport de classes ES6 ready !
Vous pouvez en voir l’utilisation basique dans les exemples de code au dessus :

Si vous lisez ce tuto et que la version 0.13 de react est déjà sortie (ou même de l’histore ancienne), utilisez bien sûr la dernière version stable : npm install react --save-dev.

Pour la gestion de l’ES6: le loader Babel

Babel (anciemment 6to5) est un transpileur Javascript qui transforme votre code ES6 en code ES5 utilisable dans les navigateurs actuels.
Quand à babel-runtime, il permet d’éviter la duplication des helpers Babel qui sont présents dans chacun de nos fichiers avec une configuration par défaut en injectant ce module qui sera requis par nos différents fichiers à la place de l’injection en dur. (http://babeljs.io/docs/usage/runtime/)

Pour nos stylesheets :

Vous pouvez vous passer de bootstrap bien entendu :). Ici le loader sass va s’occuper de convertir notre style sass en css, le loader css va se charger de le parser et style-loader va l’injecter dans votre page html. Le loader url va être utile afin de charger les différents fichiers utiles de bootstrap comme les fonts.

Votre package.json devrait ressembler à ceci :

On configure !

On va maintenant configurer webpack pour utiliser tout ce beau monde, cela se passe dans le fichier webpack.config.js.

Point par point :

  • entry : c’est le point d’entrée de votre application.
  • outpout : le dossier de sortie et le nom du fichier à générer.
  • resolve : un petit alias afin d’utiliser la version minifiée de React lors des import 'react'.
  • module les différentes options.
    • loader : c’est ici que l’on met en place nos différents loader
    • noParse : permet de ne pas parser certains fichiers pour gagner en performance.

Concernant les loaders : le premier estresponsables de la transformation de notre code ES6 en ES5 et également du jsx. On n’oublie pas d’exclure le dossier node_module afin d’éviter de parser des fichiers inutilements. (https://github.com/babel/babel-loader#babel-loader-is-slow)

le suivant est responsable de nos stylesheets :

Les paramètres du sass-loader, outputStyle et includedPaths[] permettent respectivement de rendre le css généré plus lisible et d’inclure des librairies externes, ici bootstrap.

Le dernier loader :

Permet à bootstrap de pouvoir importer les différentes fonts et icones qu’il utilise.

À ce moment, si vous exécutez la commande webpack, votre fichier bundle.js devrait être généré dans le dossier build. Vous pouvez ouvrir le fichier index.html dans votre navigateur et admirer fièrement votre application vous dire bonjour ! (Bon à condition de changer la propriété name dans le fichier app.jsx)

On va mettre en place un dernier outil. Vous vous souvenez que je vous ai fait installer webpack-dev-server au début de ce tutorial ? Et bien on va s’en servir du bougre !

Pour cela, rien de plus facile, on va ajouter un script à notre npm afin de pour le lancer facilement :

Vous n’avez plus qu’à utiliser la commande

pour lancer le tout !

Ouvrez maintenant votre navigateur à l’adresse http://127.0.0.1:8080 et devant vos yeux ébahis, l’application s’affiche.

Bon c’est bien mais sa apporte quoi au final ?

Bonne question ! Essayez de changer la propriété name dans le fichier app.jsx pour voir. Webpack va automatiquement recompiler votre bundle (et grâce à notre configuration, en vitesse, car il ne prend en compte que les fichiers modifiés), et rafraichir votre navigateur !
Et oui grâce au script que l’on insère dans le fichier index.html

celui-ci se rafraichit automatiquement en cas de modifications.

Nous voici donc maintenant avec un environnement de développement qui transpile notre code ES6, met à jour automatiquement nos modifications dans notre navigateur. Les possibilités de Webpack sont plutôt étendues, alors n’hésitez pas à rajouter des fonctionnalités pour améliorer votre workflow. Il va devenir votre meilleur ami !