このページ(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 オブジェクトですexports
。exports
は、 に設定されているプレーンな 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
同じオブジェクトではなくなります。