NodeJS / Express の「module.exports」と「exports.methods」はどういう意味ですか? 質問する

NodeJS / Express の「module.exports」と「exports.methods」はどういう意味ですか? 質問する

ランダムにソースファイルexpressフレームワークにはNodeJS、理解できないコード行が 2 行あります (これらのコード行は、ほとんどすべての NodeJS ファイルに共通です)。

/**
 * Expose `Router` constructor.
 */

exports = module.exports = Router;

そして

/**
 * Expose HTTP methods.
 */

var methods = exports.methods = require('./methods');

私は、最初のコード ファイル内の残りの関数をNodeJSアプリに公開できるようにします正確には分かりません使い方、またはその行のコードが何を意味するのかがわかります。

exportsと は実際には何をmodule.exports意味するのでしょうか?

2 番目のコードにより、ファイル内の関数が にアクセスできるようになると思いますmethodsが、これは具体的にどのように行われるのでしょうか。

基本的に、これらの魔法の言葉とは何でしょうか:moduleそしてexports?

ベストアンサー1

もう少し詳しく言うと:

moduleファイル内のグローバルスコープ変数です。

したがって、次のように電話するとrequire("foo"):

// foo.js
console.log(this === module); // true

windowブラウザでの動作と同じように動作します。

という別のグローバルオブジェクトもあります。globalこれは任意のファイルで書き込みや読み取りが可能ですが、グローバルスコープの変更を伴い、これは

exportsは、変数として存在しますmodule.exports。基本的には、輸出ファイルが必要な場合。

// foo.js
module.exports = 42;

// main.js
console.log(require("foo") === 42); // true

exportsそれ自体には小さな問題があります。_globalスコープコンテキスト+moduleない同じです。(ブラウザでは、グローバル スコープ コンテキストとはwindow同じです)。

// foo.js
var exports = {}; // creates a new local variable called exports, and conflicts with

// living on module.exports
exports = {}; // does the same as above
module.exports = {}; // just works because its the "correct" exports

// bar.js
exports.foo = 42; // this does not create a new exports variable so it just works

輸出についてさらに詳しく

おすすめ記事