blog

Nodejsエクスポート vs moudle.エクスポート

このモジュールがクラスである場合、呼び出し元がクラスのコンストラクタであり、直接新しいインスタンスを作成できるように、直接代入する必要があります。...

Feb 11, 2020 · 2 min. read
シェア

まずはその違いから

1.exports = module.exports = {};

2.exportsはmodule.exportsへの参照です。

3. module.exportsの初期値は空のオブジェクト{}なので、exportsの初期値も{}です。

4. requireはモジュールを参照し、exportsの代わりにmodule.exportsを返します!!!!

5. exports.xxxは、呼び出されたモジュールから直接見えるように、エクスポートされたオブジェクトのプロパティをぶら下げることと同じです。

6. exports = exportsオブジェクトを再割り当てすることと同じです。このモジュールがクラスである場合、呼び出し元がクラスのコンストラクタであり、新しいインスタンスを直接生成できるように、module.exportsを直接割り当てる必要があります。

もう一度例を。

例1:

var name = 'rainbow';
exports.name = name;
exports.sayName = function(){
 console.log(name);
}
// 輸出に値を割り当てることは、輸出に値を割り当てることと同じである。 module.exports この空のオブジェクトは、等価な2つのプロパティを追加する:
var name = 'rainbow';
module.exports.name = name;
module.exports.sayName = function(){
 console.log(name);
}

例2:

 exports = module.exports = somethings
 //  
 module.exports = somethings
 exports = module.exports 
 // module.exports = somethings   mudole.exports オーバーライドが実行され、その時点で module.exports 輸出との関係は破綻している。mudole.exports は新しいメモリブロックを指し、エクスポートは元のブロックを指す。 module.exports 輸出もまた、同じメモリー、あるいは同じ" "以上 exports = module.exports.

例3:

exports = function(){}; // これは輸出に値を再割り当てしている。 module.exports この2つには何の関連性もない。

例4:

module.exports.something = function(){}; exports.something = function(){}; // 上の2つの方程式は等価である

例5が最も重要です:

// index.js var something = require('./requireMe'); something(); // requireMe.js exports.something = function(){ console.log('am a function'); } // 上記のコードではエラーが発生する。 module.exports これはオブジェクトであり、直接実行することはできない //修正モード1 // requireMe.js module.exports = function(){ console.log('am a function'); } // コードを上記のように変更しても、エラーは報告されない。 module.exports は関数で、直接実行できる。 // 修正モード2 // index.js var something = require('./requireMe'); something.something(); // 最も重要なのは、必要とするオブジェクトがsomething属性を持つオブジェクトであることだ。
Read next

最初のデザインパターン:抽象ファクトリーパターン

抽象ファクトリー・パターンは、具体的なクラスを明示的に指定することなく、関連するオブジェクトや依存するオブジェクトのファミリーを作成するためのインタフェースを提供します。 抽象ファクトリを使用すると、顧客は抽象インタフェースを使用して、実際の製品の具体的な製品が何であるかを知る必要なく、関連する製品のセットを作成できます。このようにして、顧客は具体的な製品から切り離されます。 抽象ファクトリーのタスクは、製品セットの作成を担当するインターフェースを定義することです。このインターフェース内の各関係者は...

Feb 11, 2020 · 6 min read