答えは:歴史的理由。
あなたは正しく、module
とexports
しか必要ないでしょうが、下位互換性のためにまだそこにあります。
これまでのところ、ほぼすべてのパッチリリースでモジュールラッパーが変更された時代でした。
は、ノード0.1.11ではモジュールのラッパーは:
var wrapper = "function (__filename) { "+
" var onLoad; "+
" var onExit; "+
" var exports = this; "+
content+
"\n"+
" this.__onLoad = onLoad;\n"+
" this.__onExit = onExit;\n"+
"};\n";
参照:https://github.com/nodejs/node/blob/v0.1.11/src/node.js#L167#L177
あなたがexports
を見ることができるようにラッパー関数を使って呼び出されたthis
と同じでした。あなたは新しいオブジェクトとそれを交換することはできませんでした。あなたはそれにいくつかの予約キーを追加することさえできませんでした。 __onExit
という名前のプロパティを安全にエクスポートできませんでした。
は、次に0.1.12にそれはあった。
var wrapper = "function (__filename, exports) { " + content + "\n};";
を参照してください:ここでhttps://github.com/nodejs/node/blob/v0.1.12/src/node.js#L243-L245
、exports
は、引数の1つとして提供されたオブジェクトだったが、あなたは新しいオブジェクトとそれを交換しませんでしたあなたは、あなたが持っているオブジェクトからプロパティを追加または削除することしかできませんでした。
は、その後0.1.13はすなわちrequire
とinclude
、これを持っていることが第一号だった:
var wrapper = "function (__filename, exports, require, include) { " + content + "\n};";
参照:次にhttps://github.com/nodejs/node/blob/v0.1.13/src/node.js#L225-L227
0.1.14がで(アンダースコア)__module
を持っていた最初のラッパー(それはinclude
を落とした):
var wrapper = "var __wrap__ = function (__module, __filename, exports, require) { "
+ content
+ "\n}; __wrap__;";
参照:https://github.com/nodejs/node/blob/v0.1.14/src/node.js#L280-L284
そして0.1。16ラッパーで(下線なしで)module
引数を持っていた最初:
var wrapper = "var __wrap__ = function (exports, require, module, __filename) { "
+ content
+ "\n}; __wrap__;";
参照:https://github.com/nodejs/node/blob/v0.1.16/src/node.js#L444-L448
は、それはそれ以降何度も変更されていますが、これはmodule
が意思を導入してしまっている時間でありますexports
ないあなたが使用できるように、任意のより多くが、それでも便利なショートカット必要:
exports.a = 1;
exports.b = 2;
exports.c = 3;
の代わり:
実際に
module.exports.a = 1;
module.exports.b = 2;
module.exports.c = 3;
しかし何exports
がなかったならば、1が通常記述します
const exports = module.exports;
exports.a = 1;
exports.b = 2;
exports.c = 3;
以上の可能性を:
module.exports = {
a: 1,
b: 2,
c: 3,
};
や、静的解析ツールでいくつかのチェックを持っている:
const a = 1;
const b = 2;
const c = 3;
module.exports = { a, b, c };
これを行う方法はたくさんありますが、それはかなりです柔軟なメカニズム。
私にそれを打つ。私が記憶していたよりも早かった。 – OrangeDog