nodejs exportとmodule.exportsの違い

1292 ワード

ある時はただ一つの対象をモジュールに入れたいだけです.例えば、
//singleobject.js
function Hello() {
	var name;
	this.setName = function (thyName) {
		name = thyName;
	};
	this.sayHello = function () {
		console.log('Hello ' + name);
	};
};
exports.Hello = Hello;
この時、私たちは他のファイルでrequire('./singleobject').Helloを通じてHelloオブジェクトを取得する必要があります.下の書き方を見てください.
function Hello() {
    var name;
    this.setName = function(thyName) {
        name = thyName;
    };
    this.sayHello = function() {
        console.log('Hello ' + name);
    };
};
module.exports = Hello;
このオブジェクトは直接に入手できます.
//gethello.js
var Hello=require('./hello')
ハロー=new Hello();
ハロー.set Name('BYVoid')
ハロー.sayHello()
モジュールインターフェースの唯一の変化は、exports.Helloの代わりにmodule.exports=Helloを使用することである.このモジュールを外部から引用する場合、そのインターフェースオブジェクトは出力するハローオブジェクト自体であり、元のものではありません.
exports実際には、exports自体は普通の空のオブジェクトであり、すなわち{}インターフェースを宣言するために専用に使われています.本質的には、モジュールのクローズド①の内部に限られたアクセスインターフェースが作られています.特別なところがないので、例えば上記の例のハローオブジェクトの代わりに他のものを使ってもいいです.
注:exportに直接価値を付与することによりmodule.exportsに対して価値を付与してはいけません.exportsは実際にはmodule.exportsと同じオブジェクトの変数だけを指しています.それ自体はモジュール実行終了後にリリースされますが、moduleはできません.したがって、module.exportsを指定することにより、アクセスインターフェースを変更するしかありません.