ランダムにソースファイルの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