情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでファイルが直接実行された場合と別のモジュールから読み込まれた場合とで処理を変える

ファイルが直接実行された場合と別のモジュールから読み込まれた場合とで処理を変えるにはrequire.mainmoduleを使用します。

Node.jsではモジュールの単位はファイルです。すなわち、1つのJavaScriptファイルはNode.jsでは1つのモジュールとなります。

そして、コードの実行が開始したモジュールはrequire.mainに格納されています。

また、実行しているコードが含まれているモジュールはmoduleに格納されています。

そのため、require.main === moduleにより、実行しているコードが含まれているモジュールとコードの実行が開始したモジュールを比較することができます。

これらが一致する場合、実行しているコードはコードの実行が開始したモジュールに含まれていますので、モジュール、すなわち、ファイルは直接実行されたものであることが分かります。

一致しない場合、実行しているコードはコードの実行が開始したモジュールに含まれていませんので、ファイルは別のモジュールから読み込まれたものであることが分かります。

サンプルコード1

require-main-module-a.js

var b = require('./require-main-module-b.js');

if (require.main === module) {
    console.log('module a is executed from node.js directly.');
}
else {
    console.log('module a is loaded from another module.');
}

b.execute();

require-main-module-b.js

exports.execute = function () {
    if (require.main === module) {
        console.log('module b is executed from node.js directly.');
    }
    else {
        console.log('module b is loaded from another module.');
    }
}

実行結果

C:\work\node>node require-main-module-a.js
module a is executed from node.js directly.
module b is loaded from another module.

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js