2016-05-23 12 views
1

私はmodule.exportsと混同しています。私の知る限りmodule.exportsを理解されるように、他のモジュールにさらされているオブジェクトであるNodejsモジュールが混乱を輸出

exports=module.exports={} 

しかし、Node.jsの中モルガンパッケージのindex.jsに私はこれを見つけました。

module.exports = morgan 
module.exports.compile = compile 
module.exports.format = format 
module.exports.token = token 

morgancompileformattokenは、すべての機能です。

ここで何が起こっているのか説明できますか? function(morgan)はmodule.exportsにどのように割り当てられていますか?最初の行が実行された後、module.exportsはJSONオブジェクトではなく関数ですか?

+0

私は "Nodejsモジュールは混乱を輸出する"と読んでいます。 (そのために+1された) – sweaver2112

答えて

3

ノードモジュールは、基本的に次のように動作します。

var module = { 
    exports: {} 
}; 
(function (exports, require, module, __filename, __dirname) { 

    // your module code here 

})(module.exports, require, module, __filename, __dirname); 

var exported = module.exports; 
デフォルトで

exports、およびmodule.exportsは両方とも同じオブジェクトを指しています。通常どおりオブジェクトにプロパティを追加できます。ただし、デフォルトの標準オブジェクトの代わりに関数やその他のオブジェクトを返す場合はどうしますか?

この場合、module.exportsを別のものに設定することができます。これが新しいエクスポートオブジェクトになります。

module.exports = function() {}; 

そしてもちろんの

は、その機能があまりにも特性を有することができるので、あなたのコードは次のような種類-のである:

var morgan = function() {}; 
var compile = function() {}; 
var format = function() {}; 
var token = function() {}; 

morgan.compile = compile; 
morgan.format = format; 
morgan.token = token; 
module.exports = morgan; 

:に相当します

module.exports = function(){}; 
module.exports.compile = function() {}; 
module.exports.format = function() {}; 
module.exports.token = function() {}; 

function(morgan)はmodule.exportsにどのように割り当てられていますか?最初の行が実行された後、module.exportsはJSONオブジェクトではなく関数ですか?

はい、module.exportsは(ただしここにはJSONがない、JSONはJavaScriptオブジェクトが、符号化形式ではありません)デフォルトのオブジェクトの代わりに、関数であろう。

+0

これらの4行が実行された後に、module.exportsがどうなるか教えてください。 – MYGz

+0

@MohammadYusufGhazi 3つの関数オブジェクトのプロパティを持つ関数オブジェクトになります。 –

+0

したがって、format、compile、tokenはfunctionであるmodule.exportsの関数変数になりますか? – MYGz

0

module.exportsは、他のモジュールやファイルに公開されているオブジェクトです。これにより、変数、関数、その他のjavascript機能を簡単にエクスポートできます。

hereのように、変数を{}に初期化すると、オブジェクトが初期化されます。

オブジェクトには変数と関数を含めることができますが、これはJavascriptを本当にクールにするものの1つです。ファンクションをパラメータとして複雑なオブジェクトを簡単に渡すことができ、すばらしいクリーンなコードを実行できます。

ここでは、変数と関数を持つ他のモジュールやファイルに公開されているオブジェクトとしてmodule.exportsを考えます。 Object OrientedオブジェクトをJavaまたはRubyのパラメータとして渡すのと同じです。ここで

を簡単に説明しますRead More

1

あなたはより詳細な説明については、この答えを参照することもできます。

What is the purpose of node js module exports and how do you use it?

モーガンは、単純に(に輸出されるモジュールにパラメータを追加していますこの場合、compile,format、およびtokenのようなアプリケーションでモジュールを使用する必要がある場合、morgan = require('morgan')のようなものを使用してモジュールを呼び出す場合は、morgan.formatを呼び出してobjecに追加された形式を返すことができますt。

少しクリアすることができますか?

+0

これらの4行が実行された後、どのようにmodule.exportsがどのように見えるか教えていただけますか? – MYGz

0

ここで何が起こっているのか説明できますか?

割り当てステートメントが実行されています。

// path-to-my-module.js 
module.exports = morgan 
module.exports.compile = compile 
module.exports.format = format 
module.exports.token = token 

これらの4つのステートメントのそれぞれには、割り当てステートメントがあります。module.exportsオブジェクトは、あなたがこのようにそれを使用する場合、その値がそう識別子morgan

の値であるとmorganというプロパティを持っているとしている意味するであろう最初の行、module.exports = morgan、見てみる:

var m = require('./path-to-my-module.js'); 
console.log(m.morgan); 
console.log(m);