Node.js は、JavaScript ランタイムに基づくオープンソースのクロスプラットフォーム バックエンド プログラミング環境です。Node.js のモジュール システムはその中核機能の 1 つで、コードを整理して再利用するための便利なモジュール式の方法を提供します。この記事では、Node.js モジュール システムの原理、使用法、およびいくつかの一般的なアプリケーション シナリオを詳しく紹介します。
モジュールシステムの役割
モジュール システムの主な機能は、類似した機能を持つコードを別のファイルにカプセル化することで、コード構造がより明確になり、モジュールが互いに分離されるようにすることです。また、コードの保守性と再利用性を向上させ、名前の競合やグローバル変数の問題を軽減するのにも役立ちます。
モジュールの分類
Node.js では、モジュールはコア モジュールとファイル モジュールの 2 つのカテゴリに分類できます。
コアモジュール
コア モジュールは Node.js によって提供される公式モジュールであり、require
事前のインストールなしでメソッドを通じて直接インポートして使用できます。たとえば、http
サーバーを作成して HTTP リクエストを処理するためのモジュール、fs
ファイル操作のためのモジュールなどです。
ファイルモジュール
require
ファイルモジュールは自分で書いてメソッドでインポートしたモジュールです。ファイル モジュールは、JavaScript ファイル ( .js
)、JSON ファイル ( .json
)、またはコンパイルされた C++ 拡張機能 ( .node
) です。
モジュールのエクスポートとインポート
Node.js では、モジュールのコンテンツはmodule.exports
オブジェクトを通じてエクスポートでき、他のモジュールはrequire
メソッドを通じてコンテンツをインポートできます。
輸出
エクスポートする必要があるコンテンツをmodule.exports
オブジェクトのプロパティまたはメソッドに割り当てることができます。たとえば、math.js
というファイルで次のように定義できます。
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
module.exports = {
add,
subtract
};
輸入
エクスポートされたコンテンツを別のモジュールで使用するには、require
メソッドを使用して変数に代入します。たとえば、別のファイルでは次のようになります。
const math = require('./math.js');
console.log(math.add(1, 2)); // 输出:3
console.log(math.subtract(5, 3)); // 输出:2
モジュール検索ルール
このメソッドを使用してrequire
モジュールをインポートすると、Node.js は特定の検索ルールに従ってモジュール ファイルを検索します。
コアモジュール
コア モジュールの場合、Node.js は最初に組み込みコア モジュールのリストを調べます。対応するコア モジュールが見つかった場合は、そのモジュールが直接返されます。
ファイルモジュール
ファイル モジュールの場合、Node.js は次の順序で検索します。
- インポートがパス (
./
またはで始まる../
) の場合、相対パスとして扱われ、モジュール ファイルは現在のファイルが存在するディレクトリ内で見つかります。 - インポートが絶対パス ( で始まる
/
) の場合、絶対パスとして扱われ、モジュール ファイルはこのパスで検索されます。 - インポートがパスではない場合、Node.js は特定のルールに従って
node_modules
フォルダーのすべてのレベルでモジュールを検索します。node_modules
具体的なルールは、現在のファイルが存在するディレクトリから開始し、上位ディレクトリ内のフォルダを順番に検索し、ルート ディレクトリに到達することです。各node_modules
フォルダー内で、インポートされたモジュール名に従って、対応するモジュール ファイルが検索されます。
モジュールキャッシュ
Node.js は、ロードされたモジュールをキャッシュしてパフォーマンスを向上させます。これは、モジュールが複数回ロードされた場合、モジュールは 1 回だけ実行され、同じオブジェクトを返すことを意味します。
モジュールの循環依存関係
2 つのモジュールが相互に依存している場合、循環依存の問題が発生する可能性があります。たとえば、モジュール A はモジュール B に依存し、モジュール B はモジュール A に依存します。循環依存関係の問題を回避するために、Node.js は実行中にまずモジュールの第 1 レベルの依存関係を読み込み、次に他の依存関係をレイヤーごとに読み込みます。
モジュールシステムの応用シナリオ
Node.js のモジュール システムは多くのシナリオに適用できます。一般的なアプリケーション シナリオのいくつかを以下に示します。
Webサーバーを構築する
モジュール システムを使用すると、コードを簡単に整理して再利用でき、適切に構造化された拡張可能な Web サーバーを構築できます。
データベース操作
データベース操作をモジュールにカプセル化することで、これらのモジュールをさまざまな場所で再利用できます。たとえば、異なるルート ハンドラーで同じデータベース クエリ ロジックを使用します。
ファイル操作
ファイル操作は、Node.js の一般的なアプリケーション シナリオです。モジュール化することで、ファイル関連のコードをより適切に整理し、再利用できるようになります。
ツールライブラリの開発
よく使用するツールの機能をモジュール化することで、複数のプロジェクトで機能を再利用しやすくなり、開発効率が向上します。
要約する
Node.js のモジュール システムはその中核機能の 1 つであり、コードを整理する便利なモジュール式で再利用可能な方法を提供します。モジュールをインポートおよびエクスポートすることで、関連する関数のコードをまとめてカプセル化し、コードの保守性と再利用性を向上させることができます。同時に、Node.js のモジュール システムには、ルールの検索、キャッシュ、循環依存関係の解決などの機能もあります。Node.js モジュール システムの原理と使用法をマスターすることは、効率的で保守可能な Node.js アプリケーションを開発するために非常に重要です。