314 votes

Différence entre "module.exports" et "exports" dans le système de modules CommonJs

Sur cette pagehttp://docs.nodejitsu.com/articles/getting-started/what-is-require), il affirme que "Si vous souhaitez définir les exportations de l'objet à une fonction ou à un nouvel objet, vous devez utiliser le module.les exportations de l'objet."

Ma question est pourquoi.

// right
module.exports = function () {
  console.log("hello world")
}
// wrong
exports = function () {
  console.log("hello world")
}

J'ai de la console.a consigné le résultat (result=require(example.js)) et la première est [Function] le second est {}.

Pourriez-vous expliquer la raison derrière elle? J'ai lu le post ici: module.les exportations vs exportations en nodeJS . Il est utile, mais ne permet pas d'expliquer la raison pour laquelle il est conçu de cette façon. Aura-t-il un problème si la référence des exportations être retournés directement?

689voto

René Points 2251

module est juste un simple objet JavaScript avec un exports de la propriété. exports est une simple variable JavaScript qui arrive à être mis à l' module.exports. À la fin de votre fichier, node.js essentiellement 'return' module.exports de la require fonction. Un moyen simple pour afficher un fichier JS dans le Nœud pourrait être ceci:

var module = { exports: {} };
var exports = module.exports;

// your code

return module.exports;

Si vous définissez une propriété sur exports, comme exports.a = 9;, qui sera mis en module.exports.a ainsi que des objets sont passés comme des références en JavaScript, ce qui en fait signifie simplement que si vous définissez plusieurs variables pour le même objet, ils sont tous le même objet; alors exports et module.exports sont le même objet.
Mais si vous définissez exports de quelque chose de nouveau, il n'est plus fixé à l' module.exports, alors exports et module.exports n'êtes plus le même objet.

16voto

fengshuo Points 31

La réponse de René à propos de la relation entre exports et module.exports est très claire, il s'agit uniquement de références javascript. Je veux juste ajouter que:

Nous voyons cela dans de nombreux modules de nœuds:

var app = exports = module.exports = {};

Cela garantira cet événement si nous modifions module.exports, nous pouvons toujours utiliser les exportations en faisant en sorte que ces deux variables pointent vers le même objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X