Faites de lâES2015 et ES2016 dans votre navigateur, avec JSPM
Il est bien entendu que tout ce qui va suivre ne doit pas se retrouver en production (aprĂšs vous faites comme vous voulez).
Préparation de votre environnement
Tout dâabord vous avez vesoin de JSPM http://jspm.io/ qui est un gestionnaire de package sâappuyant sur la gestion des modules façon ES6 (ES2015). JPSM peut utiliser les packages npm mais aussi utiliser des projets sous GitHub.
Donc, dans un 1er temps, installez JSPM: npm install jspm -g
(précédé de sudo
pour les Mac users).
Ensuite, crĂ©ez un rĂ©pertoire, et une fois âdansâ ce rĂ©pertoire, tapez la commande suivante:
jspm init
JSPM va vous poser une série de questions:
Package.json file does not exist, create it? [yes]:
Would you like jspm to prefix the jspm package.json properties under jspm? [yes]:
Enter server baseURL (public folder path) [./]:
Enter jspm packages folder [./jspm_packages]:
Enter config file path [./config.js]:
Configuration file config.js doesn't exist, create it? [yes]:
Enter client baseURL (public folder URL) [/]:
Do you wish to use a transpiler? [yes]:
Which ES6 transpiler would you like to use, Babel, TypeScript or Traceur? [babel]:
Normalement, rĂ©pondez avec les valeurs par dĂ©faut. Ce qui est important câest la derniĂšre question Ă propos du transpiler, choisissez bien Babel (pour ce tuto lĂ ).
A la question Enter server baseURL (public folder path) [./]:
vous pouvez répondre par exemple public
si votre webapp est dans un sous répertoire public
, sinon laissez tel quel.
Vous aurez besoin dâun serveur http (jâutilise http-server
: https://www.npmjs.com/package/http-server).
Création de notre page index.html
La ligne System.import("main");
signifie que nous allons charger main.js
. Allons donc créer nos script façon ES2015.
Création de main.js et message.js
Créez un 1er fichier message.js
:
Puis créez un 1er fichier main.js
:
Lancez votre serveur http (dans mon cas http-server
). Puis ouvrez votre webapp, et la magie sâopĂšre: vous obtenez un titre Hello World!.
Et maintenant que du code ES2015 (ou ES6) tourne dans votre navigateur, allons plus loin pour faire de lâES2016 (ou ES7).
Modifier le fichier de Configuration
Dans votre répertoire, JSPM a créé un fichier config.js
qui débute de cette façon:
Modifiez le de la maniĂšre suivante:
es7.classProperties
Lâoption es7.classProperties
de Babel va nous permettre de modifier notre classe Message de la maniĂšre suivante (dans le fichier message.js
):
Il devient donc possible de définir les propriétés de la classe en dehors du constructeur (comme en TypeScript).
Modifiez votre fichier main.js
comme ceci:
Vous pouvez recharger votre page pour vérifier que votre code fonctionne toujours.
es7.decorators
Lâoption es7.decorators
de Babel va nous permettre de âdĂ©corerâ nos classes et leurs mĂ©thodes.
1er décorateur
Par exemple, écrivons un 1er décorateur: (dans notre fichier message.js
, mais ça sera bien ensuite de lâexternaliser)
Puis modifiez la classe Message
:
Puis modifiez main.js
:
Vous pouvez recharger votre page pour vérifier que votre code fonctionne toujours. Cette fois ci vous obtiendrez un titre qui devrait ressemblait à ceci: +++:Hello World!!!
Les dĂ©corateurs nous permettent donc de modifier les comportements des mĂ©thodes (attention ils sâexĂ©cutent au chargement des classes).
Un dernier pour la route: un décorateur de classe:
Ajoutez ce décorateur:
Puis modifiez la classe Message
comme ceci en lui ajoutant le décorateur @Testable
(sans parenthĂšse car nous nâavons pas utilisĂ© de paramĂštre):
Cette fonctionnalitĂ© permettant de dĂ©corer les classes et les mĂ©thodes est particuliĂšrement intĂ©ressante pour simplifier le code. Elle est dĂ©jĂ largement utilisĂ©e dans des frameworks en cours de dĂ©veloppement tels Aurelia ou Angular 2. Par contre attention, les spĂ©cifications ne sont pas encore arrĂȘtĂ©es, ce nâest donc Ă utiliser quâĂ titre expĂ©rimental.
Builder tout ça
Si vous souhaitez builder lâapplication, câest tout simple:
jspm bundle-sfx main
Cela va produire 2 fichiers: build.js
et build.js.map
Modifiez votre page index.html
comme ceci:
Dans un prochain article, je vous montrerais comment utiliser les dĂ©corateurs avec babel-node et comment il est possible de simplifier le code dâune application ExpressJS.
@+
Tweet