Fermer

août 6, 2018

Comprendre module.exports et exportations dans Node.js


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