ホームページ > ウェブフロントエンド > jsチュートリアル > Nodejs でのモジュールの読み込みについて

Nodejs でのモジュールの読み込みについて

青灯夜游
リリース: 2021-02-01 11:22:43
転載
3011 人が閲覧しました

この記事では、nodejs でのモジュールの読み込みについて紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Nodejs でのモジュールの読み込みについて

関連する推奨事項: 「nodejs チュートリアル

Nodejs を使用する場合、サードパーティを参照することは避けられません。 Nodejs に組み込まれているもの (例: http、net...) や、npm で公開されているもの (例: mssql、elasticsearch...)

この章3 つの質問に焦点を当てます:

#1. Nodejs モジュールの読み込みプロセス。

#2. アプリケーションの起動プロセス。

#3. アプリケーションは依存モジュールをどのようにロードしますか。

#1. モジュールの読み込みプロセス

##Nodejs モジュールは大きく 4 種類に分けられます。

a)

組み込みモジュール

Nodejs の C 形式で提供されるモジュール。 b)

constant module

Nodejs で定数を定義するモジュール。 c)

ネイティブ モジュール

Nodejs の JavaScript 形式で提供されるモジュール。 d)

サードパーティ モジュール

サードパーティによって提供されるモジュール。 まず、組み込みモジュールとネイティブ モジュールの生成プロセスを見てみましょう。

ネイティブ JS モジュールの生成は比較的複雑で、コンパイル後は /out/ に配置されます。 release/obj /gen ディレクトリに node_natives.h を生成します。 Nodejs でのモジュールの読み込みについて

このファイルは 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート