[第4回] Node.jsのExportモジュール

Node.js

 

はじめに

 

皆さん。こんにちは! DreamHanksのエルムです。

今回はNode.jsのExportモジュールについて説明していきます。

前回の記事は[第3回] Node.jsのモジュールです。

 

ここでは、module.exportsを使って、異なるタイプをモジュールとして公開する方法を学びます。

 

module.exportsは、Node.jsアプリケーションのすべてのJavaScriptファイルにデフォルトで含まれている特別なオブジェクトです。moduleは現在のモジュールを表す変数で、exportsはモジュールとして公開されるオブジェクトです。つまり、module.exportsに割り当てたものは、モジュールとして公開されることになります。

 

それでは、module.exportsを使って、異なるタイプをモジュールとして公開する方法を見てみましょう。

 

エクスポートリテラル

 

前述の通り、exportsはオブジェクトです。つまり、割り当てたものをモジュールとして公開するのです。例えば、文字列リテラルを割り当てると、その文字列リテラルがモジュールとして公開されます。

 

以下の例では、Message.jsで単純な文字列messageをモジュールとして公開しています。

Message.js:

 

このメッセージモジュールをインポートして、以下のように使用します。

app.js:

 

上記の例を実行して、以下のような結果を確認してください。

 

ローカルモジュールをインポートするには、ルートフォルダのパスとして./を指定する必要があります。ただし、Node.jsのコアモジュールやNPMモジュールをインポートする際には、require()関数にパスを指定する必要はありません。

 

 

エクスポートオブジェクト

 

エクスポートはオブジェクトです。そのため、プロパティやメソッドを添付することができます。次の例では、Message.jsファイルの中で、文字列プロパティを持つオブジェクトをexportしています。

Message.js:

 

上の例では、exportsオブジェクトにSimpleMessageというプロパティを付けています。それでは、以下のようにこのモジュールをインポートして使ってみましょう。

app.js:

上の例では、require()関数がオブジェクト { SimpleMessage : ‘Hello DreamHanks’} を返し、それを msg 変数に代入しています。これで、msg.SimpleMessageを使用できるようになりました。

 

コマンドプロンプトでnode app.jsと記述して上記の例を実行すると、以下のような出力が得られます。

 

上記と同様に、オブジェクトを関数付きで公開することができます。次の例では,log関数を持つオブジェクトをモジュールとして公開しています.

Log.js:

 

上記のモジュールは、{ log : function(msg){ console.log(msg); }というオブジェクトを公開します。 上記のモジュールを以下のように使用します。

app.js:

 

実行すると、コマンドプロンプトに以下のような出力が表示されます。

 

以下のように、module.exportsにオブジェクトをアタッチすることもできます。

data.js:

 

app.js:

 

上記の例を実行して、以下のような結果を確認してください。

 

エクスポートメソッド

 

以下のように、exportsオブジェクトに無名関数をアタッチすることができます。

Log.js:

 

上記のモジュールを使用すると、以下のようになります。

app.js:

上の例では、変数 msg が関数式になります。そのため、括弧()を使って関数を呼び出すことができます。

上記の例を実行すると、以下のような出力が得られます。

 

エクスポートクラス

 

JavaScriptでは、関数をクラスのように扱うことができます。次の例では、クラスのように使用できる関数を公開しています。

Person.js:

 

上記のモジュールを使用すると、以下のようになります。

app.js:

newキーワードを使ってpersonオブジェクトを作成しています。

 

上記の例を実行すると、以下のようになります。

 

このようにして、ルートフォルダーの下の別のファイルに作成されたローカルモジュールをエクスポートおよびインポートすることができます。

 

また、Node.jsでは、サブフォルダにモジュールを作成することができます。ここでは、サブフォルダからモジュールをロードする方法を説明します。

 

別フォルダのモジュールをロードする方法

 

module.exportsを使ってエクスポートしたモジュールファイルのフルパスを使用します。例えば、log.jsのlogモジュールが、アプリケーションのルートフォルダ下のユーティリティーフォルダに格納されている場合、以下のようにインポートします。

app.js:

 

上記の例では、“.”はルートフォルダを意味し、モジュールファイルの正確なパスを指定します。また、Node.jsでは、ファイル名を指定せずに、フォルダのパスを指定することができます。

例えば、以下のようにlog.jsを指定せずにユーティリティーフォルダのみを指定することができます。

app.js:

 

上記の例では、Node.jsはユーティリティーフォルダ内のpackage.jsonというパッケージ定義ファイルを検索します。これは、Nodeがこのフォルダをパッケージと仮定し、パッケージの定義を探そうとするためです。package.jsonファイルは、moduleディレクトリに置く必要があります。utilityフォルダ下のpackage.jsonでは、以下のようにmainキーでファイル名を指定します。

 

./utility/package.json:

これで、Node.jsはpackage.jsonのmainエントリを使ってlog.jsファイルを見つけ、それをインポートします。

 

package.jsonファイルが存在しない場合は、デフォルトでモジュールファイルとしてindex.jsファイルを探します。

 

終わりに

 

今回の記事は以上になります。

次回は [第5回]Node.js Webサーバを学びましょう。

ご覧いただきありがとうございます。

 

 

コメント