Quand on écrit du code en Node.js, il est courant de se poser la question sur la différence entre 'exports' et 'module.exports'. En bref, 'exports' est un raccourci pour 'module.exports', mais il a quelques spécificités.
Tout d'abord, il est important de comprendre qu'en Node.js, chaque fichier est considéré comme un module séparé. C'est pourquoi l'exportation et l'importation de fonctions, d'objets ou de valeurs entre les fichiers sont une pratique courante. À cet effet, Node.js fournit deux manières d'exporter des modules : 'exports' et 'module.exports'.
'exports' est effectivement un raccourci pour 'module.exports', ce qui signifie que les deux pointent vers le même objet. Cela signifie que si vous ajoutez des propriétés à 'exports', elles seront également ajoutées à 'module.exports'.
Voici un exemple de code qui illustre ceci :
exports.maFonction = function() {
console.log("Bonjour le monde !");
}
Cependant, il y a un élément crucial à comprendre : 'exports' ne peut pas être réaffecté, tandis que 'module.exports' le peut. Si vous essayez de réaffecter 'exports' à un nouvel objet, 'module.exports' continuera de pointer vers l'objet initial, ce qui peut entraîner des erreurs inattendues.
Par exemple, ce morceau de code ne fonctionnera pas comme prévu :
exports = function() {
console.log("Bonjour le monde !");
}
Dans ce cas, 'module.exports' ne sera pas réaffecté, car 'exports' n'est qu'un raccourci.
Une autre différence majeure entre 'exports' et 'module.exports' réside dans leur capacité à exporter. 'exports' est capable d'exporter plusieurs fonctions, objets ou valeurs à la fois. En revanche, 'module.exports' ne peut exporter qu'un seul objet, fonction ou valeur à la fois.
Par exemple, pour exporter plusieurs fonctions avec 'exports', vous pouvez faire ceci :
exports.functionA = function() { /* fonction A ici */ }
exports.functionB = function() { /* fonction B ici */ }
Mais si vous voulez exporter un seul objet avec 'module.exports', vous pouvez faire ceci :
module.exports = function() {
console.log("Bonjour le monde !");
}
En conclusion, bien que 'exports' et 'module.exports' soient liés, ils ne sont pas interchangeables dans tous les cas. Il est important de bien comprendre ces nuances pour éviter des erreurs potentielles dans votre code Node.js.