CommonJs モジュール システムにおける「module.exports」と「exports」の違い 質問する

CommonJs モジュール システムにおける「module.exports」と「exports」の違い 質問する

このページ(http://docs.nodejitsu.com/articles/getting-started/what-is-require) には、「エクスポート オブジェクトを関数または新しいオブジェクトに設定する場合は、module.exports オブジェクトを使用する必要があります。」と記載されています。

私の疑問はなぜかということです。

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

結果を console.log に記録しました ( result=require(example.js))。最初のものは 、[Function]2 番目のものは です{}

その理由を説明していただけますか? ここで投稿を読みました:Node.js の module.exports と exports参考になりますが、なぜそのように設計されているのかという理由が説明されていません。エクスポートの参照を直接返しても問題はありませんか?

ベストアンサー1

moduleは、プロパティを持つプレーンな JavaScript オブジェクトですexportsexportsは、 に設定されているプレーンな JavaScript 変数ですmodule.exports。 ファイルの最後で、node.js は基本的に関数module.exportsに「戻ります」 require。 Node で JS ファイルを表示する簡単な方法は次のようになります。

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

// your code

return module.exports;

exportsに などのプロパティを設定すると、 もexports.a = 9;設定されます。module.exports.aこれは、JavaScript ではオブジェクトが参照として渡されるためです。つまり、同じオブジェクトに複数の変数を設定すると、それらはすべて同じオブジェクトになります。したがって、exportsと はmodule.exports同じオブジェクトになります。
ただし、 をexports新しいものに設定すると、 は に設定されなくなるmodule.exportsため、exportsと はmodule.exports同じオブジェクトではなくなります。

おすすめ記事