ホームページ  >  記事  >  ウェブフロントエンド  >  Nodejsモジュールとは何ですか

Nodejsモジュールとは何ですか

青灯夜游
青灯夜游オリジナル
2021-10-29 15:23:031833ブラウズ

モジュールは Node.js アプリケーションの基本コンポーネントです。ファイルとモジュールは 1 対 1 に対応しています。Nodejs モジュールはファイルであり、このファイルは JavaScript コード、JSON、またはコンパイルされた「C/」です。 C」拡張子を使用すると、参照モジュールを「require('file path')」ステートメントで使用できます。

Nodejsモジュールとは何ですか

このチュートリアルの動作環境: Windows7 システム、nodejs バージョン 12.19.0、Dell G3 コンピューター。

Node.js ファイルが相互に呼び出せるようにするために、Node.js は単純なモジュール システムを提供します。

モジュールは Node.js アプリケーションの基本コンポーネントであり、ファイルとモジュールは 1 対 1 に対応します。言い換えれば、Node.js ファイルはモジュールであり、JavaScript コード、JSON、またはコンパイルされた C/C 拡張機能である可能性があります。

nodejs の場合、ファイルはモジュールであり、インターフェイスをエクスポートしたり、他のモジュールの組み込みを要求したりできます。

// module1.js
exports.func1 = function(){
        console.log('func1 from module1 called');
}

Module1 は、exports オブジェクトを通じて関数 func1 をモジュールのパブリック アクセス インターフェイスとして使用します。

//module2.js
var in_module1 = require('./module1.js');
in_module1.func1();
exports.func2 = function(){
        console.log('func2 from module2 called');
}

module2 には module1 in が必要です。この時点で、in_module1 は module1 のエクスポート オブジェクトと同等です。 in_module1 を使用して func1 を呼び出す場合、これは module1 のエクスポート オブジェクトを通じて func1 を呼び出すことと同じです。

同時に、module2 の独自の関数 func2 は、モジュールのエクスポート オブジェクトを通じて module2 のパブリック インターフェイスとしても機能します。

// module3.js
var in_module2 = require('./module2.js');
in_module2.func2();

同様に、module3 には module2 が必要です。このとき、in_module2 は module2 のエクスポート オブジェクトに相当します。

実行結果は次のとおりです。

rlan@rlan-LA:~/nodejs/nodetest$ node module2.js
func1 from module1 called
rlan@rlan-LA:~/nodejs/nodetest$ node module3.js
func1 from module1 called
func2 from module2 called

nodejs がモジュールをインポートすると、モジュールのパブリック インターフェイスが取得されるだけでなく、次のようなファイル内の他のステートメントも参照されます。 ##module1 .js が

// module2.js
console.log('this is in module2');
var in_module1 = require('./module1.js');
  
in_module1.func1();
  
exports.func2 = function(){
       console.log('func2 from module2 called');
}

module2 に変更され、 module1 の func1 関数が導入され、 module1 で print ステートメントが実行されます。

rlan@rlan-LA:~/nodejs/nodetest$ node module1.js
this is in module1
rlan@rlan-LA:~/nodejs/nodetest$ node module2.js
this is in module2         - module2 self
this is in module1         - require module1
func1 from module1 called  - module2 self

これで、 module2 が module1 をロードし、 module3 が module2 をロードします。 module3 が module1 を再度ロードするとどうなりますか?

// module3.js
var in_module1 = require('./module1.js');
var in_module2 = require('./module2.js');

in_module1.func1();
in_module2.func2();

このとき、 module3 は最初に module1 をロードし、次に module2 をロードし、 module2 自体が module1 の部分をロードします。実行結果は

rlan@rlan-LA:~/nodejs/nodetest$ node module3.js
this is in module1        -  require module1
this is in module2        -  require module2
func1 from module1 called -  require module2
func1 from module1 called -  module3 self
func2 from module2 called -  module3 self

になります。 module3 の要求順序が調整されている場合を見てください:

// module3.js
var in_module2 = require('./module2.js');
var in_module1 = require('./module1.js');

in_module1.func1();
in_module2.func2();

実行結果は次のとおりです:

rlan@rlan-LA:~/nodejs/nodetest$ node module3.js
this is in module2         - require module2
this is in module1         - require module2
func1 from module1 called  - require module2
func1 from module1 called  - module3 self
func2 from module2 called  - module3 self

nodejs は同じモジュールが別のモジュールで繰り返しロードされないように何らかのメカニズムを使用しているようです。そのため、

this is in module1

この行module3.js では 2 回読み込まれているように見えますが、1 回しか表示されません。

それでは、ループ読み込みがある場合はどうなるのでしょうか?次に、module1 に module2 を要求させます:

// module1.js
console.log('this is in module1');

var in_module2 = require('./module2.js');

exports.func1 = function(){
        console.log('func1 from module1 called');
}
// module2.js
console.log('this is in module2');
var in_module1 = require('./module1.js');

in_module1.func1();

exports.func2 = function(){
        console.log('func2 from module2 called');
}

実行結果は次のとおりです:

rlan@rlan-LA:~/nodejs/nodetest$ node module1.js
this is in module1
this is in module2
/home/rlan/nodejs/nodetest/module2.js:4
in_module1.func1();
           ^
TypeError: in_module1.func1 is not a function
    at Object.<anonymous> (/home/rlan/nodejs/nodetest/module2.js:4:12)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/home/rlan/nodejs/nodetest/module1.js:3:18)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
rlan@rlan-LA:~/nodejs/nodetest$ node module2.js
this is in module2
this is in module1
func1 from module1 called

nodejs は、それ自体をロードする動作を妨げているようです。 module2 を実行すると、動作は結果と同じです。 module1 が module2 をロードしていません。同じですが、エラーは報告されません。 module1 を実行しているときに、 module2 に移動して require module1 ステートメントを無視すると、 module2 が module1 の func1 を呼び出してしまい、プログラムがおかしくなってしまいました。

要約すると、nodejs でモジュールを繰り返しロードする (またはそれ自体をロードする) ネストされた require ステートメントは正しく実行できません。

[推奨学習:「

nodejs チュートリアル

」]

以上がNodejsモジュールとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。