‫Jonas : Dans cette conférence, je
‫veux vous montrer deux ou trois choses différentes impliquant des modules.
‫Et je veux commencer par vous prouver que Node
‫encapsule en fait le code de nos modules dans une fonction
‫wrapper, comme je vous
‫l'ai montré dans la dernière conférence.
‫Créons donc à nouveau un nouveau fichier, module. js, et ce
‫sont des modules, comme celui-ci.
‫D'accord, et ce que
‫je vais faire ici, c'est enregistrer les arguments sur la console, d'accord ?
‫Ainsi, les arguments sont un tableau en JavaScript, et ce
‫tableau contient toutes les valeurs
‫qui ont été transmises à une fonction.
‫Donc, quand j'enregistre ce tableau d'arguments sur la console, si
‫nous y voyons réellement des valeurs,
‫eh bien, cela signifie que nous sommes vraiment dans une fonction, d'accord ?
‫Exécutons donc les modules.
‫Et en effet, ici nous avons le code dans nos arguments.
‫Et rappelons-nous donc les cinq arguments
‫de la fonction wrapper.
‫Le premier est l'export, donc celui-ci, qui
‫est actuellement
‫vide car nous n'exportons rien.
‫La seconde est la fonction require, nous pouvons
‫donc voir
‫qu'ici, nous avons bien la fonction require.
‫Ensuite, le troisième s'appelle module, d'accord.
‫Et dans module, nous avons ensuite des exportations de module, dont nous
‫avons encore une fois parlé dans la dernière conférence.
‫Et qu'est-ce que nous avons ici n'est pas si important, encore une
‫fois, je voulais juste
‫vous montrer que nous sommes en fait dans une fonction en ce
‫moment, de sorte que tout ce code que
‫nous avons dans ce module est en effet enveloppé dans cette fonction wrapper, d'accord ?
‫Ensuite, le numéro trois et le numéro quatre sont le nom du
‫fichier et le nom du répertoire.
‫Et effectivement, c'est le nom du module dans lequel nous sommes
‫actuellement, donc modules. js.
‫Et puis ici, nous avons le nom du répertoire.
‫Je suis donc sur
‫mon bureau, puis dans ce dossier maintenant Node works.
‫Tellement similaire à celui-ci
‫ici, mais celui-ci a alors le nom du module, d'accord ?
‫Donc ça nous prouve que,
‫effectivement, tout le code à l'intérieur d'un
‫module est encapsulé, et que nous avons accès à toutes
‫ces variables, donc ces arguments, d'accord ?
‫Donc je trouve juste que c'est une expérience intéressante
‫que nous pouvons faire.
‫Et nous pouvons en fait faire une autre chose cool.
‫Donc, pour vous montrer la
‫fonction wrapper, nous pouvons exiger le module module, d'accord.
‫Il y a donc un module
‫appelé module, que nous n'avons en fait jamais utilisé mais en interne, Node l'utilise.
‫Et là-dedans, nous avons l'emballage.
‫Et c'est en fait cette propriété qui est
‫en fait la fonction wrapper.
‫Nous pouvons donc maintenant y jeter un œil.
‫Et où est-ce, ah, ouais.
‫Alors voilà, voilà en fait.
‫C'est donc la fonction wrapper.
‫Et donc en effet, vous voyez export,
‫require, module, filename et directory name, puis le corps
‫de la fonction.
‫Et c'est donc ce que Node
‫utilise en interne, donc fondamentalement ce modèle ici,
‫il l'utilise, puis remplit le corps de cette fonction avec notre code.
‫Bon, encore une fois, juste une expérience intéressante ici.
‫Maintenant, la chose la plus importante
‫que je veux vous montrer ici est comment nous pouvons
‫exporter et importer des données d'un module dans l'autre.
‫Et donc commençons par créer un nouveau module ici, dans
‫lequel je vais créer une calculatrice, un
‫peu comme je l'ai mentionné dans la dernière vidéo.
‫Appelons donc ce module de test-1, car nous
‫allons en avoir quelques-uns.
‫Et ici, je vais créer une classe de calculatrice.
‫Encore une fois, c'est la syntaxe
‫ES6 pour écrire des classes en JavaScript.
‫Ajoutons donc quelques méthodes ici, alors ajoutez a
‫et b, cela renverra bien sûr a
‫plus b, donc des trucs très simples, multiplier a, b, renverra
‫a fois b, et ensuite, divisons
‫aussi, juste
‫par souci d'exhaustivité ici, a, b, comme ça.
‫Faites-lui une sauvegarde, il le formate bien, et
‫maintenant nous pouvons faire le module. exporte, comme nous l'avons appris
‫dans la dernière vidéo,
‫et nous exportons notre calculatrice, d'accord ?
‫Encore une fois, nous utilisons module. exporte lorsque
‫nous voulons exporter une seule valeur.
‫Et dans ce cas, notre
‫seule valeur ici est la classe calculatrice.
‫Donc module. les exportations sont exactement ce
‫qui est renvoyé par un module, donc tout ce que nous
‫y mettons, eh bien, est ensuite exporté automatiquement, n'est-ce pas ?
‫Nous pouvons ensuite enregistrer la valeur
‫exportée dans une variable lors de son importation, alors faisons-le maintenant.
‫Et maintenant, ici, nous pouvons lui donner le nom que nous voulons.
‫Donc le nom que nous exportons de l'autre côté, donc dans
‫cet autre module, n'a pas d'importance.
‫On peut l'appeler comme on veut ici.
‫Donc, dans ce sens, c'est comme un retour de fonction normal,
‫n'est-ce pas, donc nous pouvons toujours retourner
‫n'importe quelle variable, mais ensuite l'appeler
‫autrement lorsque nous sauvegardons le résultat d'une fonction dans une
‫variable, n'est-ce pas ?
‫Donc, puisque c'est notre
‫propre module, nous devons utiliser la barre oblique, donc ce que
‫j'ai fait juste ici, puis test-module-1.
‫Et le JS, souviens-toi, on peut juste laisser tomber ça,
‫ce n'est pas nécessaire, d'accord ?
‫Et donc cette variable C ici, qui est en majuscule
‫car pour la classe, nous utilisons généralement toujours des noms en majuscule.
‫Et rappelez-vous, nous exportons en fait une classe ici.
‫D'accord, nous pouvons maintenant utiliser cette classe pour faire des calculs.
‫Alors tout d'abord créons une nouvelle calculatrice,
‫une calculatrice, parce que plus tard nous
‫en aurons une autre, d'accord ?
‫Et maintenant, nous créons une nouvelle instance d'une calculatrice comme
‫celle-ci, et cela ne devrait
‫pas être nouveau pour vous à ce stade.
‫Et puis enregistrons via la console le résultat
‫de l'utilisation réelle de cela.
‫Donc calc1. ajouter, et disons deux et cinq.
‫Faites une sauvegarde et commentons ces deux-là.
‫Enregistrez-le à nouveau, puis modules Node, et nous avons
‫ici le résultat, sept.
‫Donc ça fait deux plus cinq, donc ça marche, non ?
‫Et ici, dans notre module
‫de test, nous pourrions le faire d'une manière plus élégante.
‫Nous pourrions donc affecter cette classe ici
‫directement au module. exportations, non?
‫Donc en ce moment nous avons une déclaration de classe,
‫donc c'est un peu comme une
‫déclaration de fonction, où nous disons calculatrice de fonction, et puis
‫ceci, et ici nous disons classe, d'accord ?
‫Mais nous pourrions également le faire avec une expression de classe.
‫Et donc comme ça, nous n'utilisons tout simplement pas le nom de
‫la calculatrice de toute façon.
‫Alors copiez-le, commentez-le.
‫D'accord, alors juste comme ça.
‫Nous disons simplement qu'il s'agit
‫d'une classe, puis nous l'affectons à une variable.
‫Et c'est maintenant une expression.
‫Alors reprenons cela, et
‫nous reverrons bien sûr nos sept, d'accord ?
‫Encore une fois, il s'agit simplement d'affecter immédiatement la valeur que
‫nous voulons moduler. exportations, et cela
‫va nous faire économiser quelques lignes de
‫code, et probablement rendre notre code un peu meilleur.
‫D'accord, c'est ainsi que nous exportons des trucs avec module. exports, et voyons maintenant comment
‫et quand nous pouvons utiliser le raccourci export
‫que j'ai également mentionné dans la
‫vidéo précédente.
‫Créons donc un simple commentaire ici, module. exportations.
‫Ensuite, ici, il suffit d'exporter.
‫Donc un nouveau test de module, et encore, module-2. js.
‫Et donc l'alternative pour faire module. exports consiste à
‫ajouter des propriétés à l'objet exports lui-même.
‫Nous pourrions donc le faire
‫comme ceci, et en utilisant à nouveau l'exemple de calculatrice d'avant,
‫nous pourrions le faire comme ceci.
‫Nous pouvons donc simplement ajouter des propriétés à l'objet exports.
‫Donc a et b renverront a
‫plus b, exportations. multipliez a, b renverra a
‫fois b,
‫et maintenant dupliquons à nouveau juste pour être complet, et d'accord.
‫Nous avons donc créé ici essentiellement trois
‫fonctions anonymes, ces trois-là,
‫et les avons affectées à trois propriétés d'export.
‫Et donc maintenant quand on exporte ce module de l'autre
‫côté, donc en modules. js, nous aurons
‫essentiellement accès à cet objet d'exportation.
‫Alors laisse-moi te montrer ça.
‫Disons donc que const calc2 est requis.
‫Encore une fois, n'oubliez pas le point et la barre
‫oblique, car c'est notre propre module.
‫D'accord, et maintenant ce calc2 ici est l'objet d'exportation.
‫D'accord, alors laisse-moi te montrer ça.
‫Console. log, calc2. ajouter, deux et cinq.
‫Cela devrait donc nous donner exactement le même résultat qu'avant.
‫Et en effet, voici nos sept, comme avant.
‫Et si nous
‫nous sommes multipliés, alors cela devrait être bien sûr 10.
‫Et donc oui, nous en avons sept ici de l'addition ici,
‫et ensuite cette multiplication nous donne 10.
‫J'espère donc que cela fait vraiment
‫une différence entre module. exportations et exportations claires.
‫Et encore une fois, lorsque nous utilisons simplement
‫des exportations, nous pouvons ajouter des éléments à cet objet, donc essentiellement des
‫propriétés, puis lorsque nous importons cela,
‫donc lorsque nous avons besoin de ce
‫module, le résultat que
‫nous allons obtenir est un objet contenant toutes ces propriétés.
‫Et puisque nous obtenons un
‫objet, nous pouvons utiliser la puissance de la déstructuration ES6
‫pour faire de la magie sympa ici, en gros.
‫Alors laissez-moi me débarrasser de celui-ci, ou en
‫fait le dupliquer, commenter celui-ci, et ainsi nous pouvons
‫utiliser la déstructuration pour déstructurer l'objet que nous obtenons, d'accord ?
‫Et cela fonctionne comme ceci, nous utilisons donc les accolades, puis
‫nous créons simplement des noms
‫de variables pour les propriétés de cet objet.
‫Alors encore une fois, utilisons ajouter, multiplier et diviser.
‫Ce sont donc les noms que nous avons
‫sur cet objet d'exportation.
‫Alors additionnez, multipliez et divisez, et
‫ceux-ci doivent en fait être exactement le même
‫nom que dans l'objet d'origine, d'accord ?
‫Maintenant, ce que cela fera,
‫c'est que fondamentalement, cela créera une variable
‫appelée simplement multiplier.
‫Et donc en effet, voici notre résultat.
‫Et nous ne pouvons en fait importer que ceux que nous voulons.
‫Alors disons que nous voulons seulement ajouter et multiplier, d'accord ?
‫Et donc nous n'aurons accès qu'à ces
‫deux-là, au lieu de tout importer du module.
‫Et c'est un modèle assez courant
‫que vous verrez utilisé dans Node, et
‫nous le ferons également tout au long du projet.
‫D'accord, donc dans cette vidéo,
‫nous avons parlé de la fonction wrapper ici,
‫puis nous avons parlé de l'exportation et
‫de l'importation à l'aide du module. exportations et la sténographie des exportations.
‫Et maintenant enfin, juste pour
‫finir, parlons de la mise en cache très rapidement.
‫D'accord, créons donc test-module-3 ici.
‫Et ce que je vais faire ici, c'est créer une console. log, donc en gros du
‫code de niveau supérieur à l'intérieur de ce module.
‫Bonjour du module, d'accord, et puis je
‫veux aussi exporter une fonction.
‫Juste une seule fonction, et donc je dis module. exporte une
‫fonction égale sans aucun argument, celle qui se
‫connectera simplement à la
‫console : enregistrez ce beau texte.
‫Juste quelques petits emoji ici pour le faire ressortir un peu.
‫D'accord, exigeons maintenant ce module de test.
‫Test-module-3, et je ne l'enregistre dans aucune variable.
‫Au lieu de cela, je vais appeler la fonction
‫tout de suite sans l'enregistrer dans une variable.
‫Nous pourrions donc bien sûr faire
‫cela, puis nous aurions la fonction dans une variable, et
‫nous pourrions ensuite l'appeler.
‫Mais c'est exactement la
‫même chose, car cela renverra cette fonction que nous
‫avons définie, donc celle-ci ici, non?
‫Il renverra ceci parce que nous utilisons module. exporte, puis
‫nous appelons immédiatement cette fonction ici, d'accord ?
‫Et donc en fait, faisons ça trois fois.
‫Et en gardant à l'esprit que nous avons la mise en cache dans Node. js modules, que pensez-vous qu'il
‫se passera lorsque nous exécuterons ce code ?
‫OK, alors lançons ça et voyons ce qui va se passer.
‫Nous avons ici le résultat, bonjour
‫du module, puis trois fois enregistrer ce beau texte.
‫Nous avons donc cette journalisation ici trois fois, eh bien, parce que
‫nous avons appelé la même fonction trois fois.
‫Mais nous n'avons reçu le bonjour du module qu'une seule fois, d'accord ?
‫Et c'est à cause de la mise en cache.
‫Donc, techniquement, ce module n'a été chargé qu'une seule fois,
‫et donc le code qu'il contient n'a également été exécuté qu'une seule fois.
‫Et c'est pourquoi cette ligne de code ici,
‫cette journalisation n'a été exécutée qu'une seule fois, d'accord ?
‫Et donc ces deux autres journaux ici, eh bien, ils
‫provenaient du cache, ils étaient donc stockés quelque part dans
‫le cache des processus du nœud.
‫Et une fois que nous avons appelé la fonction ici pour la
‫deuxième fois, elle a simplement été récupérée
‫à partir de là, au lieu de charger à nouveau le module, d'accord ?
‫Donc, je suis sûr que cela a beaucoup de sens pour vous.
‫Et c'était donc notre conférence, en fait.
‫Si vous avez des questions, vous pouvez bien
‫sûr, comme toujours, les poster dans le Q&A et vous y obtiendrez de l'aide.
‫Cela termine donc toute cette section.
‫Je sais que c'était assez difficile jusqu'à ce que nous arrivions à ce
‫point, donc beaucoup de choses à assimiler.
‫Et si vous avez tout corrigé à 100
‫%, ne vous en faites pas
‫trop, car tout au
‫long du cours, la plupart des choses finiront par devenir claires, d'accord ?
‫Alors ne vous inquiétez pas, continuez simplement à avancer dans le cours,
‫et je vous verrai dans la section suivante.