En tant que développeurs, nous sommes souvent confrontés à des situations où nous devons utiliser du code inconnu. Une question se posera pendant ces moments. Combien de temps devrais-je investir pour comprendre le code que je vais utiliser? Une réponse typique est d'apprendre suffisamment pour commencer à coder; puis explorez ce sujet plus loin lorsque le temps le permet. Eh bien, le moment est venu de mieux comprendre  module.exports  et  exports  dans Node.js. Voici ce que j'ai appris. 
Remarque: cet article traite de l'utilisation de modules dans Node. Si vous voulez apprendre comment utiliser des modules dans le navigateur, lisez: Comprendre les modules JavaScript: regrouper et transpiler .
Pour une introduction approfondie et de haute qualité à Node.js, vous ne peut pas dépasser le développeur de pile plein canadien Wes Bos. Essayez son cours ici et utilisez le code SITEPOINT pour obtenir 25% de réduction et pour aider SitePoint.
Qu'est-ce qu'un module
 Le module encapsule le code associé dans une seule unité de code. Lors de la création d'un module, cela peut être interprété comme déplaçant toutes les fonctions associées dans un fichier. Illustrons ce point par un exemple impliquant une application créée avec Node.js. Imaginons que nous ayons créé un fichier nommé  greetings.js  et qu'il contienne les deux fonctions suivantes: 
 // greetings.js
sayHelloInEnglish = function () {
  retourner "Bonjour";
};
 sayHelloInSpanish = function () {
  retourner "Hola";
}; 
Exportation d'un module
 L'utilitaire de  greetings.js  augmente lorsque son code encapsulé peut être utilisé dans d'autres fichiers. Donc, refactorons  greetings.js  pour atteindre cet objectif. Pour comprendre ce qui se passe réellement, nous pouvons suivre un processus en trois étapes: 
 1) Imaginez que cette ligne de code existe en tant que première ligne de code dans  greetings.js : 
 // salutations.js
var exports = module.exports = {}; 
 2) Attribuez une expression dans  greetings.js  que nous souhaitons rendre disponible dans d'autres fichiers pour l'objet  exports : [19659007] // greetings.js
// var exports = module.exports = {};
 exports.sayHelloInEnglish = function () {
  retourner "BONJOUR";
}; 
 exports.sayHelloInSpanish = function () {
  retourner "Hola";
}; 
 Dans le code ci-dessus, nous aurions pu remplacer  exports  par  module.exports  et obtenir le même résultat. Si cela semble déroutant, rappelez-vous que  exports  et  module.exports  font référence au même objet. 
3) Il s'agit de la valeur actuelle de module.exports:
 module.exports = {
  sayHelloInEnglish: function () {
    retourner "BONJOUR";
  },
 sayHelloInSpanish: function () {
    retourner "Hola";
  }
}; 
Importation d'un module
 Importons les méthodes publiquement disponibles de  greetings.js  dans un nouveau fichier appelé  main.js . Ce processus peut être décrit en trois étapes: 
 1) Le mot-clé  requis  est utilisé dans Node.js pour importer des modules. Imaginez que c'est ainsi que  nécessite  est défini: 
 var require = function (path) {
 // ... 
 renvoie module.exports;
}; 
 
 2) Exigeons  greetings.js  dans  main.js : 
 // main.js
var greetings = require ("./ greetings.js"); 
Le code ci-dessus est équivalent à ceci:
 // main.js
var salutations = {
  sayHelloInEnglish: function () {
    retourner "BONJOUR";
  },
 sayHelloInSpanish: function () {
    retourner "Hola";
  }
}; 
 
 3) Nous pouvons maintenant accéder aux méthodes publiquement disponibles de  greetings.js  en tant que propriété de notre variable  greetings  dans  main.js . 
 // main.js
var greetings = require ("./ greetings.js");
 // "Bonjour"
greetings.sayHelloInEnglish (); 
 // "Hola" 
greetings.sayHelloInSpanish (); 
Points importants
 Le mot clé  nécessite  renvoie un objet qui référence la valeur de  module.exports  pour un fichier donné. Si un développeur réattribue involontairement ou intentionnellement  module.exports  à un autre objet ou à une structure de données différente, toutes les propriétés ajoutées à l'objet  module.exports  d'origine seront inaccessibles. [19659010] Un exemple aidera à élaborer ce point: 
 // greetings.js
// var exports = module.exports = {};
 exports.sayHelloInEnglish = function () {
  retourner "BONJOUR";
}; 
 exports.sayHelloInSpanish = function () {
  retourner "Hola";
}; 
 / * 
-  cette ligne de code réassigne 
 
-  module.exports
* /
module.exports = "Bonjour"; 
 
 Maintenant, nous avons besoin de  greetings.js  dans  main.js :
 // main.js
var greetings = require ("./ greetings.js"); 
 Rien n'est différent pour le moment. Nous affectons la variable  salutations  à tout code qui est publiquement disponible dans  greetings.js . 
 La conséquence de la réaffectation de  module.exports  à une donnée la structure autre que sa valeur par défaut est révélée lorsque nous essayons d'invoquer  sayHelloInEnglish  et  sayHelloInSpanish : 
 // main.js
// var greetings = require ("./ greetings.js");
 / * 
-  TypeError: objet Bonjour n'a pas de méthode 
 
-  'sayHelloInEnglish'
* /
greetings.sayHelloInEnglish (); 
 
 / * 
-  TypeError: objet Bonjour n'a pas de méthode 
 
-  'sayHelloInSpanish'
* /
greetings.sayHelloInSpanish (); 
 
 Pour comprendre pourquoi ces erreurs se produisent, consignons la valeur de  greetings  dans une console: 
 // "Bonjour"
console.log (salutations); 
 À ce stade, nous essayons d'accéder aux méthodes  sayHelloInEnglish  et  sayHelloInSpanish  sur la chaîne "Bonjour."  module.exports en d'autres termes, ne fait plus référence à l'objet par défaut contenant ces méthodes. 
Conclusion
 Importer et exporter des modules est une tâche très répandue dans Node.js. J'espère que la différence entre  exportations  et  module.exports  est plus claire. De plus, si vous rencontrez une erreur lors de l’accès à des méthodes publiquement disponibles, j’espère que vous comprendrez mieux pourquoi ces erreurs peuvent se produire. 
Ressources recommandées
Wes Bos
Apprenez à créer des applications et des API avec Node.js. Utilisez le code de coupon 'SITEPOINT' à la caisse pour obtenir 25% de réduction .
Il existe plusieurs façons de démarrer un serveur de noeud local. Regardez comme ce screencast explore certaines des techniques de serveur de nœuds courantes et comment les instancier.
Source link
