Node.jsのモジュールロードメカニズムとモジュールオブジェクトexports
3715 ワード
モジュールとは
ノードのためにjsのファイルは互いに呼び出すことができます.jsはモジュールシステムを提供する.
モジュールはノードです.jsアプリケーションの基本的な構成部分であり、ファイルとモジュールは一つ一つ対応しています.つまり、ノードです.jsファイルはモジュールであり、JavaScriptコード、JSON、またはコンパイルされたC/C++拡張である可能性があります.
ノードのモジュール区分:
ノードのモジュールは、コアモジュール、ファイルモジュール、カスタムモジュール(非コアモジュール)に分けられます.
ノードにモジュールを導入するには、3つのステップが必要です.
(1)経路解析
(2)ファイルの配置
(3)コンパイル実行
コアモジュール:ノードソースのコンパイル中にバイナリコードにコンパイルされ、ノードプロセスが開始されると、一部のコアモジュールがメモリにロードされるため、コアモジュールが導入されると、ファイルの位置決めとコンパイルの実行は無視でき、ロード速度が最も速い.
ファイルモジュール:実行時に動的にロードし、完全なパス解析、ファイルの位置決め、コンパイル実行の3ステップが必要で、コアモジュールより遅い.
カスタムモジュールの速度が遅い理由:ロード中、ノードはターゲットファイルが見つかるまでモジュールパスのパスを1つずつ検索し、ファイルパスが深いほど時間がかかります.
二次ロード:require()モジュールを二次ロードする場合はキャッシュ優先のロード方式が採用されます.キャッシュ・ロードの優先ポリシーにより、二次ロードはパス分析、ファイルの位置決め、実行プロセスのコンパイルを必要とせず、二次ロードの効率が向上します.
Node.jsのモジュールロードメカニズム:
1.絶対パス:
2.相対パス:
注:require('./try')などのファイル接尾辞名を書かない場合は、ファイル検索メカニズムに関連します.
1>まずロードモジュールのファイル名に従って検索し、見つからない場合はモジュールファイル名の後に付ける.jsの接尾辞を検索します.
2>見つからない場合は、モジュールファイル名の後に付ける.jsonの接尾辞、検索を行います.
3>まだ見つからない場合は、モジュールファイル名の後に付ける.nodeの接尾辞、検索を行います.
4>最後に見つからない場合は、エラーメッセージが表示されます.
上記を総合する、Node.jsのファイル検索メカニズムは次のとおりです.
ファイル名->js -> .json -> .node
モジュールオブジェクト:exports
1つのモジュールでvarによって定義された変数で、その役割ドメイン範囲は現在のモジュールであり、外部は直接アクセスできません.1つのモジュールが別のモジュールで定義された変数にアクセスできるようにするには、次の方法があります.
1>変数をglobalオブジェクトの1つの属性とする(推奨しない)
カスタムモジュール:
ファイルモジュール:
コンソールにコマンドを入力:nodeファイルモジュールファイル名
出力結果は100
2>モジュールの役割ドメインには、exportsというモジュールオブジェクトが内蔵されています.(単一出力変数)
カスタムモジュール:
ファイルモジュール:
印刷出力:
上記の書き方はexportsオブジェクトを何度も使うので面倒です.
3>moduleを通過する.exportsオブジェクトは、1つのモジュール内の複数のローカル変数にアクセスします.(一括出力オブジェクトのプロパティとメソッド)
カスタムモジュール:
ファイルモジュール:
ps:require()メソッドの戻り値はカスタムモジュールのmoduleである.exports.
プログラムの実行結果は次のとおりです.
もう一つmoduleexportsとexportsの関係の2つの例:
例1:
カスタムモジュール:
ファイルモジュール:
nodeファイルモジュールを実行するには、次の手順に従います.
コンソールにHello Worldを出力します.
例2:
カスタムモジュール:
ファイルモジュール:
注意:
义齿exportsオブジェクトは実は同じオブジェクトを指しています.moduleを破壊しないでください.exportsとexportsの間の参照関係、
ノードのためにjsのファイルは互いに呼び出すことができます.jsはモジュールシステムを提供する.
モジュールはノードです.jsアプリケーションの基本的な構成部分であり、ファイルとモジュールは一つ一つ対応しています.つまり、ノードです.jsファイルはモジュールであり、JavaScriptコード、JSON、またはコンパイルされたC/C++拡張である可能性があります.
ノードのモジュール区分:
ノードのモジュールは、コアモジュール、ファイルモジュール、カスタムモジュール(非コアモジュール)に分けられます.
ノードにモジュールを導入するには、3つのステップが必要です.
(1)経路解析
(2)ファイルの配置
(3)コンパイル実行
コアモジュール:ノードソースのコンパイル中にバイナリコードにコンパイルされ、ノードプロセスが開始されると、一部のコアモジュールがメモリにロードされるため、コアモジュールが導入されると、ファイルの位置決めとコンパイルの実行は無視でき、ロード速度が最も速い.
ファイルモジュール:実行時に動的にロードし、完全なパス解析、ファイルの位置決め、コンパイル実行の3ステップが必要で、コアモジュールより遅い.
カスタムモジュールの速度が遅い理由:ロード中、ノードはターゲットファイルが見つかるまでモジュールパスのパスを1つずつ検索し、ファイルパスが深いほど時間がかかります.
二次ロード:require()モジュールを二次ロードする場合はキャッシュ優先のロード方式が採用されます.キャッシュ・ロードの優先ポリシーにより、二次ロードはパス分析、ファイルの位置決め、実行プロセスのコンパイルを必要とせず、二次ロードの効率が向上します.
Node.jsのモジュールロードメカニズム:
1.絶対パス:
require('/home/liyabin/WebstormProjects/untitled/try.js');
2.相対パス:
require('./try.js');// require('try.js'), node , node-modules。
注:require('./try')などのファイル接尾辞名を書かない場合は、ファイル検索メカニズムに関連します.
1>まずロードモジュールのファイル名に従って検索し、見つからない場合はモジュールファイル名の後に付ける.jsの接尾辞を検索します.
2>見つからない場合は、モジュールファイル名の後に付ける.jsonの接尾辞、検索を行います.
3>まだ見つからない場合は、モジュールファイル名の後に付ける.nodeの接尾辞、検索を行います.
4>最後に見つからない場合は、エラーメッセージが表示されます.
上記を総合する、Node.jsのファイル検索メカニズムは次のとおりです.
ファイル名->js -> .json -> .node
モジュールオブジェクト:exports
1つのモジュールでvarによって定義された変数で、その役割ドメイン範囲は現在のモジュールであり、外部は直接アクセスできません.1つのモジュールが別のモジュールで定義された変数にアクセスできるようにするには、次の方法があります.
1>変数をglobalオブジェクトの1つの属性とする(推奨しない)
カスタムモジュール:
global.a = 100;
ファイルモジュール:
require('/home/liyabin/WebstormProjects/untitled/try.js');
console.log(a);
コンソールにコマンドを入力:nodeファイルモジュールファイル名
出力結果は100
2>モジュールの役割ドメインには、exportsというモジュールオブジェクトが内蔵されています.(単一出力変数)
カスタムモジュール:
var num = 100;
var str = "Hello node";
exports.price = num;
exports.name = str;
exports.myFunction = function () {
console.log("Hello world");
};
ファイルモジュール:
var m = require('/home/liyabin/WebstormProjects/untitled/try.js');
console.log(m);
印刷出力:
{ price: 100, name: 'Hello node', myFunction: [Function] }
上記の書き方はexportsオブジェクトを何度も使うので面倒です.
3>moduleを通過する.exportsオブジェクトは、1つのモジュール内の複数のローカル変数にアクセスします.(一括出力オブジェクトのプロパティとメソッド)
カスタムモジュール:
var num = 100;
var str = "Hello node";
var f = function (){
console.log("Hello");
};
module.exports = {
price:num,
name:str,
myFunction:f
};
ファイルモジュール:
var m = require('/home/liyabin/WebstormProjects/untitled/try.js');
console.log(m);
ps:require()メソッドの戻り値はカスタムモジュールのmoduleである.exports.
プログラムの実行結果は次のとおりです.
{ price: 100, name: 'Hello node', myFunction: [Function: f] }
もう一つmoduleexportsとexportsの関係の2つの例:
例1:
カスタムモジュール:
exports.printHelloworld = ()=>{
console.log('Hello world');
}
ファイルモジュール:
var m = require('/home/liyabin/WebstormProjects/untitled/router.js');
m.printHelloworld();
nodeファイルモジュールを実行するには、次の手順に従います.
コンソールにHello Worldを出力します.
例2:
カスタムモジュール:
function printHello(){
console.log("Hello");
}
module.exports = printHello;
ファイルモジュール:
var m = require('/home/liyabin/WebstormProjects/untitled/router.js');
m();
注意:
义齿exportsオブジェクトは実は同じオブジェクトを指しています.moduleを破壊しないでください.exportsとexportsの間の参照関係、