Node.js モジュールシステムの比較: CommonJS vs ES Modules vs AMD

2024-04-02

Node.jsで別のファイルから関数をインクルードする方法

require と exports を使用する

これは従来の方法で、Node.jsの初期から使用されています。

1 関数をインクルードするファイル

  1. 関数を定義します。
  2. 関数を exports オブジェクトにプロパティとして割り当てます。
// 関数を定義
function add(a, b) {
  return a + b;
}

// 関数を exports オブジェクトに割り当てる
exports.add = add;

2 関数を呼び出すファイル

  1. require モジュールを使用して、関数を定義しているファイルを読み込みます。
  2. 読み込んだファイルの exports オブジェクトから、必要な関数を取得します。
// 関数を定義しているファイルを読み込む
const math = require('./math');

// 読み込んだファイルの exports オブジェクトから必要な関数を取得
const add = math.add;

// 関数を呼び出す
const result = add(1, 2);
console.log(result); // 3

これはES Modulesと呼ばれる新しいモジュールシステムの機能で、JavaScriptの将来的な標準になる予定です。

  1. export キーワードを使用して、関数を公開します。
// 関数を定義
export function add(a, b) {
  return a + b;
}
  1. 読み込んだファイルから、必要な関数をインポートします。
// 関数を定義しているファイルを読み込み
import { add } from './math';

// 関数を呼び出す
const result = add(1, 2);
console.log(result); // 3

どちらの方法もメリットとデメリットがあります。

  • メリット:
    • Node.jsの初期から使用されているため、多くの開発者に知られている。
    • すべてのNode.jsバージョンで動作する。
  • デメリット:
    • コードが冗長になりやすい。
    • デフォルトエクスポートしか使用できない。
  • メリット:
    • コードが簡潔になる。
  • デメリット:
    • 比較的新しく、すべての開発者に知られていない。
    • 古いバージョンのNode.jsでは動作しない。

一般的には、新しいプロジェクトでは importexport を使用することを推奨します。ただし、既存のプロジェクトで requireexports を使用している場合は、無理に変更する必要はありません。




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


3分で分かる!JavaScriptでハイライト表示機能の実装方法

このチュートリアルを始める前に、以下の知識が必要です。HTMLCSSjQuery単語をハイライトするには、以下の2つの方法があります。background-color プロパティを使うspan タグを使うどちらの方法でも、background-color プロパティを使ってハイライトしたい単語の背景色を変えることができます。...


【2つの方法】JavaScriptとHTMLでクリックされたボタンのIDを取得する方法(サンプルコード付き)

このページでは、JavaScriptとHTMLを用いて、クリックされたボタンのIDを取得する方法について解説します。方法以下の2つの方法を紹介します。HTMLのonclick属性JavaScriptのaddEventListener()メソッド...


JavaScript:find()とsplice()を使ってオブジェクトを配列から削除する方法

要件JavaScriptの基本的な知識jQueryライブラリの基本的な知識配列の基本的な知識使用するツールJavaScriptjQueryブラウザ(Chrome、Firefox、Edgeなど)ステップ 1:HTML ファイルの作成次の HTML ファイルを作成します。...


React Native でカスタムナビゲーションを自在に操る:Navigator コンポーネントの徹底解説

本ガイドでは、Navigator コンポーネントの仕組みと、それを用いてカスタムナビゲーションを実装する方法を、JavaScript、iOS の観点から分かりやすく解説します。Navigator コンポーネントは、React Navigation のコア機能の一つであり、画面遷移の管理とレンダリングを担う基盤となるコンポーネントです。デフォルトでは、スタックナビゲーションやタブナビゲーションなどのプリセットされたナビゲーションパターンを提供しますが、独自のカスタマイズも可能です。...


JestとReact Testing Libraryを使って、要素が存在しないことを効率的にテストする方法

JestとReact Testing Libraryは、Reactコンポーネントのテストに役立つツールです。このチュートリアルでは、これらのツールを使って要素が存在しないことをテストする方法について説明します。前提条件Node. jsとnpmまたはyarnがインストールされていること...


SQL SQL SQL SQL Amazon で見る



Node.js モジュール開発:module.exports を使って関数・変数・オブジェクトを公開する方法

module. exports は、以下の2つの役割を担っています。モジュールの公開インターフェースを定義する モジュールから他のモジュールへ公開したい関数・変数・オブジェクトなどを module. exports に格納することで、外部からアクセス可能になります。


Node.js REPL で JavaScript をマスター:初心者向けチュートリアル

スクリプトファイルを作成: hello. js という名前のファイルに、次のコードを保存します。REPL を起動: ターミナルを開き、次のコマンドを実行します。スクリプトの実行確認: 出力に Hello, world! が表示されることを確認します。