この記事では、nodejs でのモジュールの読み込みについて紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
関連する推奨事項: 「nodejs チュートリアル 」
Nodejs を使用する場合、サードパーティを参照することは避けられません。 Nodejs に組み込まれているもの (例: http、net...) や、npm で公開されているもの (例: mssql、elasticsearch...)
この章3 つの質問に焦点を当てます:
#1. Nodejs モジュールの読み込みプロセス。
#2. アプリケーションの起動プロセス。
#3. アプリケーションは依存モジュールをどのようにロードしますか。
#1. モジュールの読み込みプロセス
##Nodejs モジュールは大きく 4 種類に分けられます。a)
組み込みモジュールNodejs の C 形式で提供されるモジュール。 b)
constant moduleNodejs で定数を定義するモジュール。 c)
ネイティブ モジュールNodejs の JavaScript 形式で提供されるモジュール。 d)
サードパーティ モジュールサードパーティによって提供されるモジュール。 まず、組み込みモジュールとネイティブ モジュールの生成プロセスを見てみましょう。
ネイティブ JS モジュールの生成は比較的複雑で、コンパイル後は /out/ に配置されます。 release/obj /gen ディレクトリに node_natives.h を生成します。
このファイルは js2c.py によって生成され、Nodejs ソース コードの lib ディレクトリにあるすべての js ファイルを ASCII コードに変換し、対応する配列に保存します。組み込み C モジュール
生成プロセスは比較的単純です。組み込み C モジュールの各エントリは、マクロ NODE_MODULE_CONTEXT_AWARE_BUILTIN によって関数に展開されます。 tcp_wrap モジュール たとえば、static void register_tcp_wrap() 属性(コンストラクター) 関数に展開されます。GCC に詳しい友人は、属性 (コンストラクター) によって変更された関数が Nodejs の main() 関数の前に実行されることを知っています。つまり、組み込み C モジュールは main() 関数の前にロードされます。 modlist_builtin リスト、および modlist_builtin が struct node_module 型のポインタである場合、get_builtin_module() は必要なモジュールを見つけるために走査されます。
実際には、単純な JS モジュールであっても、組み込み C モジュールであっても、最終的には実行可能ファイルにコンパイルされます。両者の抽出方法は大きく異なり、js モジュールは process.binding('natives') を使用しますが、C モジュールは get_builtin_module() を直接使用します。 node.cc には binding() 関数が用意されており、require() で他のモジュールを参照する際に、 binding() 関数が導入されます。この関数を分析してみましょう:この関数は主に組み込み、定数、ネイティブの 3 つのモジュールに対応していることが視覚的にわかります。
builtin has the most priority
, and will be search in modlist_builtin. プロセスは非常に簡単で、リスト全体を走査して同じ名前のモジュールを探すだけです。見つかった後、モジュールの登録関数が最初に実行され、その後データのエクスポートが返されます。constants モジュールは 2 番目に優先されます
。Nodejs の定数定義は定数を通じてエクスポートされます。ネイティブの優先順位は最も低くなります
。#2. アプリケーションの起動プロセス
# #上の図は、test.js がパラメーターとして開始され、最終的にどのように実行されるかを説明するフローチャートです。プロセス全体は 4 つのステップに分けることができます:
1. 実行可能ファイル ノード: ノード エントリ、主に起動プロセス中の環境準備の役割を果たします2.src/node.js : 起動スクリプト3.ネイティブ モジュール: module.js#4.module.js の実行の準備: アプリケーションのロード、コンパイル、実行に使用されるネイティブ モジュール
アプリケーションは依存モジュールをどのようにロードしますか
#
前に述べたように、NativeModule.require() はネイティブ モジュールの参照を支援することのみを担当しており、lib/module.js にはこれで十分です。
しかし、一般的なアプリケーションが matatives モジュールだけでなく、サードパーティのモジュールも参照する必要があることは明らかです。 module.js内。
プログラミング関連の知識について詳しくは、プログラミング教育をご覧ください。 !
以上がNodejs でのモジュールの読み込みについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。