Node.jsモジュールシステム
Node.js ファイルが相互に呼び出せるようにするために、Node.js は単純なモジュール システムを提供します。
モジュールは Node.js アプリケーションの基本コンポーネントであり、ファイルとモジュールは 1 対 1 に対応します。言い換えれば、 Node.js ファイルはモジュールであり、JavaScript コード、JSON、またはコンパイルされた C/C++ 拡張機能などがあります。
モジュールを作成する
Node.js では、モジュールの作成は非常に簡単です。次のように、次のコードで「main.js」ファイルを作成します。
var hello = require('./hello'); hello.world();
上の例では、コード require('./ hello') が導入され、現在のディレクトリに hello.js ファイルが追加されます (./ は現在のディレクトリで、node.js のデフォルトのサフィックスは js です)。
Node.js は、exports と require の 2 つのオブジェクトを提供します。ここで、exports はモジュールによって公開されるインターフェイスであり、require はモジュールのインターフェイスを外部から取得するために使用されます。つまり、取得したモジュールのエクスポート オブジェクトです。
次に、hello.js ファイルを作成します。コードは次のとおりです:
exports.world = function() { console.log('Hello World'); }
上記の例では、hello.js は、exports オブジェクトを使用して、world をモジュールのアクセス インターフェイスとして使用し、main.js では require を使用します。 ('./hello ') してこのモジュールをロードすると、直接アクセスできます hello.js のエクスポート オブジェクトのメンバー関数について質問します。
オブジェクトをモジュールにカプセル化したい場合があります。その形式は次のとおりです:
module.exports = function() { // ... }
例:
//hello.js function Hello() { var name; this.setName = function(thyName) { name = thyName; }; this.sayHello = function() { console.log('Hello ' + name); }; }; module.exports = Hello;
この方法でオブジェクトを直接取得できます:
//main.js var Hello = require('./hello'); hello = new Hello(); hello.setName('BYVoid'); hello.sayHello();
モジュールインターフェースの唯一の変更点は次のとおりです。 use module.exports = Hello Exports.world = function(){} を置き換えました。 モジュールが外部参照される場合、そのインターフェイス オブジェクトは、元の Hello オブジェクトではなく、出力される Hello オブジェクトそのものになります。 輸出。
サーバー側モジュールをどこに配置するか?
コード内でモジュールを使用していることに気づいたかもしれません。このように:
var http = require("http"); ... http.createServer(...);
Node.js には「http」というモジュールが付属しており、コード内でそれをリクエストし、戻り値をローカル変数に割り当てます。
これにより、ローカル変数が、http モジュールによって提供されるすべてのパブリック メソッドを備えたオブジェクトに変わります。
Node.jsのrequireメソッドにおけるファイル検索戦略は以下の通りです:
Node.jsには4種類のモジュール(ネイティブモジュールと3種類のファイルモジュール)があるため、requireメソッドは非常にシンプルですが、内部ロードは非常に複雑であり、ロードの優先順位も異なります。以下の図に示すように:
ファイル モジュール キャッシュからのロード
ネイティブ モジュールとファイル モジュールの優先順位は異なりますが、ファイル モジュール キャッシュからの既存のモジュールのロードよりも優先されません。
ネイティブ モジュールからのロード
ネイティブ モジュールの優先順位は、ファイル モジュール キャッシュの優先順位に次いで 2 番目です。ファイル名を解析した後、require メソッドはまずモジュールがネイティブ モジュール リストにあるかどうかを確認します。 http モジュールを例に挙げます。ディレクトリには http/http.js/http.node/http.json ファイルがありますが、require("http") はこれらのファイルからではなく、ネイティブ モジュールからロードされます。
ネイティブモジュールにもキャッシュ領域があり、こちらも最初にキャッシュ領域からロードされます。キャッシュ領域がロードされていない場合は、ネイティブ モジュール ロード メソッドが呼び出されてロードおよび実行されます。
ファイルからロード
ファイル モジュール キャッシュが存在せず、ネイティブ モジュールではない場合、Node.js は require メソッドで渡されたパラメーターを解析し、ファイル システムから実際のファイルをロードします。前のセクションで紹介したとおり、ここではファイル モジュールを見つけるプロセスについて詳しく説明します。知っておく価値のある詳細もいくつかあります。
require メソッドは、
http、fs、path などのネイティブ モジュールのパラメータを受け入れます。
./mod または ../mod、相対パスを持つファイルモジュール。
/pathtomodule/mod、絶対パス付きのファイルモジュール。
mod、非ネイティブモジュール用のファイルモジュール。