最近少しだけ、プライベートでNodeをいじっています。
そういえば、初めてNodeを触ってからもう2年も経つんだなぁとシミジミ。
安定版なんかもうv0.10.3なんですね。
さて、過去のオデの日記で「node.jsで自作モジュールの作り方」というエントリーをポストしてますが、
この頃は多分あまりexportsとmodule.exportsの意味を理解していなかったようです。
※今もしていません。
今回それらを調べてみたところ、
・exports
関数をモジュール化する
・module.exports
オブジェクト(関数、配列、JSON、など)をモジュール化する
という認識で良いような気がしました。
あまり意味が分からない場合は、
Node.js Module – exports vs module.exports(※英語)にあるように、
標準は「module.exports」、補助的に「exports」という事なので、
特に深く考えずmodule.exportsを使うという認識でほぼ間違いはない気がします。
前回の僕のエントリーを元に考えます。
・exportsの場合
Person.js
exports.setName = function(name) { this.name = name; }; exports.hello = function() { console.log("hello!"); }; exports.myName = function() { console.log(this.name); };app.js
var p = require("/path/to/Person"); p.setName("koexuka"); p.hello(); // "hello!" p.myName(); // "koexuka"これらはつまり、setName(name)、hello()、myName()という3つの関数を
var p = require("/path/to/person");をp変数にオブジェクトとしてexportして使っています。
「意味的にPersonオブジェクトを生成して・・・」というより、上記3つの関数をまとめたオブジェクト、という感じでしょうか。
・module.exportsの場合]
Person.js
var Person = function(name) { this.name = name; }; Person.prototype.hello = function() { console.log("hello"); }; Person.prototype.myName = function() { console.log(this.name); }; module.exports = Person;app.js
var Person = require("/path/to/Person"); var p = new Person("koexuka"); p.hello(); // "hello!" p.myName(); // "koexuka"こっちは、Personオブジェクトを取り出して使っています。
両方とも意味合いは同じですが、Person型のオブジェクトとして利用するという意味合いを持たせるには
module.exportsを利用するべきです。
ちなみにexportsとmodule.exportsが1つのファイル(例:Person.js)に混在している場合は
module.exportsが優先されてしまうので要注意。
以上でぇぇぇぇぇす。
もし間違いがあればご指摘下さいm(___)m
0 件のコメント:
コメントを投稿