Node.js モジュールシステムの比較: CommonJS vs ES Modules vs AMD
Node.jsで別のファイルから関数をインクルードする方法
require と exports を使用する
これは従来の方法で、Node.jsの初期から使用されています。
1 関数をインクルードするファイル
- 関数を定義します。
- 関数を
exports
オブジェクトにプロパティとして割り当てます。
// 関数を定義
function add(a, b) {
return a + b;
}
// 関数を exports オブジェクトに割り当てる
exports.add = add;
2 関数を呼び出すファイル
require
モジュールを使用して、関数を定義しているファイルを読み込みます。- 読み込んだファイルの
exports
オブジェクトから、必要な関数を取得します。
// 関数を定義しているファイルを読み込む
const math = require('./math');
// 読み込んだファイルの exports オブジェクトから必要な関数を取得
const add = math.add;
// 関数を呼び出す
const result = add(1, 2);
console.log(result); // 3
これはES Modulesと呼ばれる新しいモジュールシステムの機能で、JavaScriptの将来的な標準になる予定です。
export
キーワードを使用して、関数を公開します。
// 関数を定義
export function add(a, b) {
return a + b;
}
- 読み込んだファイルから、必要な関数をインポートします。
// 関数を定義しているファイルを読み込み
import { add } from './math';
// 関数を呼び出す
const result = add(1, 2);
console.log(result); // 3
どちらの方法もメリットとデメリットがあります。
- メリット:
- Node.jsの初期から使用されているため、多くの開発者に知られている。
- すべてのNode.jsバージョンで動作する。
- デメリット:
- コードが冗長になりやすい。
- デフォルトエクスポートしか使用できない。
- メリット:
- コードが簡潔になる。
- デメリット:
- 比較的新しく、すべての開発者に知られていない。
- 古いバージョンのNode.jsでは動作しない。
一般的には、新しいプロジェクトでは import
と export
を使用することを推奨します。ただし、既存のプロジェクトで require
と exports
を使用している場合は、無理に変更する必要はありません。
require と exports を使用する
// 関数を定義
function add(a, b) {
return a + b;
}
// 関数を exports オブジェクトに割り当てる
exports.add = add;
2 関数を呼び出すファイル (main.js)
// 関数を定義しているファイルを読み込む
const math = require('./math');
// 読み込んだファイルの exports オブジェクトから必要な関数を取得
const add = math.add;
// 関数を呼び出す
const result = add(1, 2);
console.log(result); // 3
import と export を使用する
// 関数を定義
export function add(a, b) {
return a + b;
}
// 関数を定義しているファイルを読み込み
import { add } from './math';
// 関数を呼び出す
const result = add(1, 2);
console.log(result); // 3
- 上記のサンプルコードは、Node.jsのバージョン16.14.0で動作確認しています。
Node.jsで別のファイルから関数をインクルードするその他の方法
CommonJS モジュールを使用する
CommonJSは、Node.jsの初期から使用されているモジュールシステムです。require
モジュールを使用して、CommonJSモジュールを読み込むことができます。
// 関数を定義しているファイル (math.js)
module.exports = {
add: function(a, b) {
return a + b;
}
};
// 関数を呼び出すファイル (main.js)
const math = require('./math');
// 関数を呼び出す
const result = math.add(1, 2);
console.log(result); // 3
ES Modulesは、JavaScriptの将来的な標準になる予定のモジュールシステムです。import
キーワードを使用して、ES Modulesを読み込むことができます。
// 関数を定義しているファイル (math.js)
export function add(a, b) {
return a + b;
}
// 関数を呼び出すファイル (main.js)
import { add } from './math';
// 関数を呼び出す
const result = add(1, 2);
console.log(result); // 3
AMD モジュールを使用する
AMDは、RequireJSなどのライブラリで使用されているモジュールシステムです。define
関数を使用して、AMDモジュールを定義します。
// 関数を定義しているファイル (math.js)
define('math', function() {
return {
add: function(a, b) {
return a + b;
}
};
});
// 関数を呼び出すファイル (main.js)
require(['math'], function(math) {
// 関数を呼び出す
const result = math.add(1, 2);
console.log(result); // 3
});
どの方法を使用するべきかは、プロジェクトの要件や開発者の好みによって異なります。
- 既存のプロジェクトで CommonJS モジュールを使用している場合は、引き続き CommonJS モジュールを使用することができます。
- 新しいプロジェクトでは、ES Modules を使用することを推奨します。
- AMD モジュールは、RequireJSなどのライブラリを使用する必要がある場合にのみ使用することを検討してください。
Node.jsで別のファイルから関数をインクルードするには、いくつかの方法があります。どの方法を使用するべきかは、プロジェクトの要件や開発者の好みによって異なります。
javascript import header