Node.js のモジュールは、ファイル パスまたは名前を通じてモジュール参照を取得できます。モジュール参照は、Node 組み込みモジュールでない限り、js ファイル パスにマップされます。 Node の組み込みモジュールは、一般的に使用されるいくつかの API を開発者に公開しており、それらは Node プロセスの開始時にプリロードされます。
その他、サードパーティ モジュールや NPM 経由でインストールされたローカル モジュールなど、各モジュールはパブリック API を公開します。開発者がそれをインポートできるようにします。たとえば、
var mod = require('module_name')
この文を実行すると、Node は組み込みモジュール、または NPM を通じてインストールされたモジュールを読み込みます。 require 関数はオブジェクトを返します。オブジェクトによって公開される API は、関数、オブジェクト、または関数、配列、または任意のタイプの JS オブジェクトなどの属性です。
ノードモジュールのロードとキャッシュメカニズムは次のとおりです
1) 組み込みモジュール(コアモジュール)をロードします
2) ファイルモジュールをロードします(ファイルモジュール)
3) ファイルディレクトリモジュールをロードします(フォルダ) Module) )
4) node_modules にモジュールをロードします
5) ロードされたモジュールを自動的にキャッシュします
1. 組み込みモジュールをロードします
Node の組み込みモジュールはバイナリ形式にコンパイルされ、ファイル パスではなく名前で直接参照されます。サードパーティ モジュールが組み込みモジュールと同じ名前を持つ場合、組み込みモジュールは同じ名前のサードパーティ モジュールを上書きします。したがって、名前を付ける際には、組み込みモジュールと同じ名前にならないように注意する必要があります。たとえば、http モジュール
var http = require('http')
を取得した場合、返される http は、HTTP 関数を実装する Node の組み込みモジュールです。
2. ファイルモジュールをロードします
絶対パス
var myMod = require('/home/base/my_mod')
または相対パス
var myMod = require('./my_mod')
ここでは拡張子「.js」は無視されます。以下は同等です
var myMod = require('./my_mod') var myMod = require('./my_mod.js')
3. ファイルディレクトリモジュールをロードします
var myMod = require('./folder')
などのフォルダーという名前のディレクトリがあるとします。このとき、ノードはフォルダー ディレクトリ全体を検索し、そのフォルダーがパッケージであると想定し、パッケージ定義ファイルのパッケージを見つけようとします。ジェソン。フォルダー ディレクトリに package.json ファイルが含まれていない場合、Node はデフォルトのメイン ファイルが Index.js であると想定し、index.js を読み込みます。 Index.js も存在しない場合、読み込みは失敗します。
ディレクトリ構造が以下の場合
package.jsonは以下のように定義されています
{ "name": "pack", "main": "modA.js" }
このときrequire('./folder')はモジュールmodA.jsを返します。 package.jsonが存在しない場合は、モジュールindex.jsが返されます。 Index.js も存在しない場合は読み込み例外が発生します。
4. モジュールをnode_modulesにロードします
モジュール名がパスまたは組み込みモジュールではない場合、Nodeは現在のディレクトリのnode_modulesフォルダー内を検索しようとします。現在のディレクトリにnode_modulesが見つからない場合、Nodeは親ディレクトリのnode_modulesから検索し、ルートディレクトリまで再帰的に検索します。
心配しないでください。npm コマンドを使用すると、node_modules ディレクトリを簡単にインストール、アンインストール、更新できます。
5. ロードされたモジュールを自動的にキャッシュします
Node は、毎回再検索することなく、ロードされたモジュールをキャッシュします。以下は例です
modA.js
console.log('模块modA开始加载...') exports = function() { console.log('Hi') } console.log('模块modA加载完毕')
init.js
var mod1 = require('./modA') var mod2 = require('./modA') console.log(mod1 === mod2)
コマンドライン実行:
node init.js
入力は次のとおりです
2 回必要ですが、modA が必要であることがわかります。 .js まだ一度しか実行されていません。 mod1 と mod2 は同じです。つまり、両方の参照が同じモジュール オブジェクトを指します。
以上がNode.js がモジュールをロードし、モジュール インスタンスをインストールする方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。