Maison > interface Web > js tutoriel > le corps du texte

Quelle est la différence entre « module.exports » et « exports » dans Node.js, et pourquoi les deux sont-ils utilisés ?

Patricia Arquette
Libérer: 2024-11-22 11:44:09
original
201 Les gens l'ont consulté

What is the difference between `module.exports` and `exports` in Node.js, and why are both used?

Explorer les différences entre 'module.exports' et 'exports' dans Node.js

Dans le système de modules Node.js, il sont deux variables notables : « module.exports » et « exports ». Bien qu'ils puissent sembler interchangeables, comprendre les nuances entre eux est crucial pour un développement de module efficace.

Considérez le contrat mentionné dans la question fournie :

module.exports = exports = nano = function database_module(cfg) {...}
Copier après la connexion

Cette syntaxe soulève la question : quel est le différence entre 'module.exports' et 'exports', et pourquoi les deux sont-ils utilisés ?

Pour résoudre ce casse-tête, imaginons que chaque module commence par les lignes suivantes :

var module = new Module(...);
var exports = module.exports;
Copier après la connexion

Essentiellement, 'module.exports' et 'exports' pointent initialement vers le même objet. Lorsque vous attribuez des valeurs à « exports », vous modifiez en fait l'objet auquel « module.exports » fait référence.

Dans l'exemple de contrat, considérons d'abord l'approche « sûre » :

// Using module.exports
module.exports.a = function() {
    console.log('a');
}

module.exports.b = function() {
    console.log('b');
}
Copier après la connexion

Ici, "safe" signifie que 'module.exports' reste un objet contenant des fonctions exportées. Lorsque vous avez besoin de ce module, vous obtenez cet objet.

Cependant, l'affectation à 'exports' peut être "dangereuse" :

// Using exports
exports.a = function() {
    console.log('a');
}

exports.b = function() {
    console.log('b');
}
Copier après la connexion

Alors que 'module.exports' et 'exports' pointent initialement vers le même objet, en attribuant directement aux pauses « exportations » cette référence. Par conséquent, 'module.exports' pointe toujours vers un objet vide {}, qui sera renvoyé lorsque le module est requis.

Il est à noter que l'attribution d'une fonction constructeur à 'module.exports' peut avoir des implications différentes que de le faire pour les « exportations » :

// Assigning constructor to module.exports
module.exports = function Something() {
    console.log('bla bla');
}
Copier après la connexion

Dans ce cas, le « typeof » du résultat renvoyé sera « fonction ». Cela vous permet de requérir et d'invoquer le module directement en tant que fonction.

Cependant, attribuer un constructeur aux 'exports' n'aura pas le même effet :

// Assigning constructor to exports
exports = function Something() {
    console.log('bla bla');
}
Copier après la connexion

En réaffectant 'exports, ' vous coupez la connexion entre 'module.exports' et la fonction constructeur, laissant 'module.exports' vide object.

En conclusion, comprendre les différences subtiles entre 'module.exports' et 'exports' est essentiel pour développer des modules Node.js efficaces. Bien que les deux variables pointent initialement vers le même objet, « module.exports » doit être considéré comme le moyen officiel d'exporter les valeurs d'un module, car il pointe systématiquement vers l'objet exporté. En revanche, les « exports » peuvent être utiles lorsque vous devez modifier directement l'objet exporté ou lors de l'attribution d'une fonction constructeur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal