Dans le cours : JavaScript : La programmation orientée objet

Implémenter les modules ES6

Dans ce chapitre, nous allons explorer les modules. Il s'agit d'une autre grande nouveauté introduite dans le langage par l'ECMAScript 6. Il faut des navigateurs relativement modernes ou des versions modernes de Node.js pour utiliser les modules. Mais bon, vous savez qu'aujourd'hui, la plupart des nouveautés de l'ES6, pour ne pas dire toutes, sont correctement implémentées dans la grande majorité des navigateurs, et c'est le cas également dans les versions modernes de Node. L'idée des modules, c'est de séparer votre code JavaScript en différents fichiers, fichiers qui vont alors s'appeler les uns les autres. Vous allez voir que l'utilisation des modules a une grande influence sur les outils utilisés aujourd'hui pour développer des applications JavaScript modernes. Dans le fichier que vous avez ici devant les yeux, vous avez deux classes, vous avez la classe Person, vous avez la classe Employee qui étend la classe Person, et puis ici dans le fond nous avons deux lignes de codes. Ce sont les deux seules lignes de codes qui vont véritablement utiliser les classes définies plus haut. Grâce aux modules, je vais séparer ce script en trois fichiers différents. Je vais créer ici un nouveau fichier que je vais appeler person.js, et dans ce fichier, je vais mettre la classe Person. Je vais la couper ici depuis script.js et la coller dans ce nouveau fichier person.js que je sauvegarde. Je vais faire la même chose avec la classe Employee. Je fais un nouveau fichier, je l'appelle employee.js, et dans ce nouveau fichier, je vais aller définir ma classe employee que je coupe dans script.js et que je viens recoller dans employee.js. Maintenant, regardez bien ici employee.js. Cette classe, rappelez-vous qu'elle étend la classe Person, elle doit être capable de voir cette classe Person, elle doit être capable de faire référence à cette autre classe qui est maintenant définie dans un autre fichier. Pour que cela soit possible, je dois faire deux choses. Premièrement, dans le fichier person.js, je dois exporter cette classe grâce à ce mot clé export. Ça, ça signifie que la classe Person doit être visible dans les autres modules. On va pouvoir maintenant l'importer dans le fichier employee.js afin que la classe Employee puisse véritablement étendre cette classe Person. Ici, au dessus, dans ce module, je vais devoir importer la classe Person from, depuis, le fichier person.js. Je sauvegarde et je vais maintenant dans mon fichier script.js. J'ai besoin d'avoir une référence à la classe Employee puisque je fais new Employee(). Je dois pouvoir voir cette classe Employee dans ce fichier malgré que cette classe soit définie dans un autre fichier, le fichier employee.js. Rebelote, je vais devoir exporter ici un Employee depuis ce fichier, export class Employee, comme ceci, et ça, ça me permet de venir réimporter cette classe, import, je vais importer maintenant Employee, from, depuis le fichier employee.js. Et quand je sauvegarde maintenant script.js, j'ai une erreur dans la console qui me dit : « import decalarations may only appear at the top level of a module ». « Les déclarations d'importation ne peuvent apparaître qu'au début d'un module ». Il semblerait que ce fichier script.js pour le moment ne soit pas considéré comme un module. le import que nous avons ici au-dessus ne fonctionne pas comme il faut. Il y a une bonne façon de résoudre ce problème, et la bonne façon, c'est d'utiliser un logiciel tel que Webpack, on appelle ça un bundler, c'est-à-dire un logiciel qui va rassembler tous nos modules et va récupérer un seul et unique fichier à partir de tous ces modules. On va étudier Webpack plus tard dans ce chapitre, dans cette vidéo, on va adopter une solution temporaire, juste pour bien comprendre comment fonctionnent les modules. Ici, dans mon fichier index.html, au moment où j'appelle script.js, je vais rajouter ici type ="module" comme ceci, et ça, ça va permettre à ce fichier script.js d'être maintenant considéré comme un module. Le import fonctionne et vous voyez que je récupère alors mon objet ici dans la console. Que s'est il réellement passé dans les coulisses ? Pour le savoir, on va voir ici dans la console un autre onglet, l'onglet Réseau. Et là, vous voyez qu'il y a eu des requêtes supplémentaires qui ont été faites vers employee.js et vers person.js. Chaque fois qu'on a un import, on génère en réalité une requête vers le fichier que nous sommes en train d'importer. Ça, c'est un petit problème, on augmente le nombre de requêtes, donc, on diminue les performances de l'application. Dans cette vidéo, c'est pas vraiment ça qui nous préoccupe. On réglera ce problème plus tard, le plus important, c'est de bien comprendre le système d'exportation puis d'importation qui permet de faire fonctionner les modules ES6.

Table des matières