ホームページ ウェブフロントエンド jsチュートリアル 私から Nodejs を学ぶ (3) --- Node.js module_javascript スキル

私から Nodejs を学ぶ (3) --- Node.js module_javascript スキル

May 16, 2016 pm 04:47 PM
node.js モジュール

紹介と情報

Node.js の公式 API を通じて、Node.js 自体が多くのコア モジュール http://nodejs.org/api/ を提供していることがわかります。これらのコア モジュールはバイナリ ファイルにコンパイルされており、require('モジュール名) ') 取得します。コア モジュールの読み込み優先度が最も高くなります (これは、コア モジュールと同じ名前のモジュールがある場合に反映されます)

(今回は主にカスタムモジュールについて話します)

Node.js には、ファイル モジュールと呼ばれるタイプのモジュールもあります。これは、JavaScript コード ファイル (ファイル拡張子として .js)、JSON 形式のテキスト ファイル (ファイル拡張子として .json)、または編集されたファイルにすることができます。 C/C ファイル (ファイル拡張子として .node);

ファイル モジュールのアクセス方法は、require('/filename.suffix') require('./filename.suffix') requrie('../filename.suffix') を介してアクセスします。ファイル サフィックスは省略できます。 「/」で始まる場合は絶対パスでロードすることを意味し、「./」で始まる「../」で始まる場合は相対パスでロードすることを意味し、「./」で始まる場合は同じディレクトリ内のファイルをロードすることを意味します。 🎜>

前述したように、Nodejs は優先度の js ファイル > json ファイル >

をロードしようとします。

カスタムモジュールを作成する

カウンターを例に挙げます

私から Nodejs を学ぶ (3) --- Node.js module_javascript スキル

コードをコピーします コードは次のとおりです。
var OutputVal = 0;
var increment = 1; //Increment
/* 出力値を設定します*/
function seOutputVal (val) {
OutputVal = val;
}
/* 増分を設定します*/
function setIncrement(incrementVal){
increment = incrementVal;
}
/* Output*/
function printNextCount()
{
OutputVal = increment;
console.log(outputVal) ;
}
function printOutputVal() {
console.log(outputVal);
}
exports.seOutputVal = seOutputVal;
exports.setIncrement = setIncrement;
module.exports.printNextCount = printNextCount;
カスタム モジュールのサンプル ソース コード


この例の焦点は、外部アクセス用のインターフェイスを提供するエクスポートと module.exports です。効果を確認するために以下を呼び出してみましょう。

カスタムモジュールの呼び出し

私から Nodejs を学ぶ (3) --- Node.js module_javascript スキル

/*
Node.jsファイルがモジュールである場合、このファイルは Javascript コード、JSON、またはコンパイルされた C/C 拡張機能である可能性があります。
2 つの重要なオブジェクト:
require は外部からモジュールを取得します
エクスポートはモジュール インターフェイスを公開します
*/
var counter = require('./1_modules_custom_counter');
console.log('モジュール [1_modules_custom_counter] への最初の呼び出し');
counter.seOutputVal(10) //10 から始まるカウントを設定します
counter.setIncrement (10); ();
counter.printNextCount();
counter.printNextCount();
counter.printNextCount();
/*
同じモジュールを複数回呼び出す必要があります 繰り返しロードされません
*/
var counter = require('./1_modules_custom_counter');
console.log('モジュール [1_modules_custom_counter] への 2 回目の呼び出し');
counter.printNextCount( );
カスタムソースコードを呼び出すモード

実行すると、exports および module.exports を通じて公開されるすべてのメソッドにアクセスできることがわかります。

例でわかるように、require('./1_modules_custom_counter') を通じてモジュールを 2 回取得しましたが、printNextCount() メソッドは 2 回目の参照後に 60 から開始されました~~~

その理由は、node.js が requirerequire を通じて同じモジュールを複数回呼び出す場合、Node.js はファイル名に基づいてロードされたすべてのファイル モジュールをキャッシュするため、再ロードされないためです。 >

注: ファイル名によるキャッシュは実際のファイル名を参照し、受信パス形式が異なるだけで別のファイルとはみなされません。

私が作成した 1_modules_custom_counter ファイルには printOutputVal() メソッドがありますが、これはエクスポートや module.exports を介した外部パブリック アクセス メソッドを提供しません。

1_modules_load ファイルに直接アクセスして実行するとどうなりますか?

答えは次のとおりです: TypeError: オブジェクト # にはメソッド 'printOutputVal' がありません

exports と module.exports の違い

上記の例の後は、exports および module.exports パブリック メソッドを通じてアクセスできるようになります。どちらも効果は得られるので、多少の違いはあるはずです~~~ 例を見てみましょう!

私から Nodejs を学ぶ (3) --- Node.js module_javascript スキル

コードをコピーします コードは次のとおりです。
var counter = 0; .printNextCount = function (){
counter = 2;
console.log(counter);
}
var isEq = (exports === module.exports);
console.log (isEq) ;
2_modules_diff_exports.js ファイルのソース コード


新しい 2_modules_diff_exports_load.js ファイルを作成して名前を付けましょう

私から Nodejs を学ぶ (3) --- Node.js module_javascript スキル

var Counter = require('./2_modules_diff_exports ');
Counter.printNextCount();


呼び出し後の実行結果は上記のようになります

2_modules_diff_exports_load.js ファイル ( var isEq = (exports === module.exports); ) の isEq の値を出力し、返された true

PS: 等号が 3 つあることに注意してください。よくわからない場合は、自分で情報を確認してください。

結論を急がずに、これら 2 つの JS ファイルを module.exports の対応するコードに変更してください

// 変更された 2_modules_diff_exports.js ソース コードは次のとおりです
var counter = 0;
module.exports = function(){
counter = 10;
this.printNextCount = function()
{
console.log( counter);
}
}
var isEq = (exports === module.exports);
console.log(isEq);


//2_modules_diff_exports_load の変更されたソース コード。 js ファイルは次のとおりです
var Counter = require('./2_modules_diff_exports');
var counterObj = new Counter();
counterObj.printNextCount();

私から Nodejs を学ぶ (3) --- Node.js module_javascript スキル

呼び出し後の実行結果は上記のようになります

2_modules_diff_exports_load.js ファイル ( var isEq = (exports === module.exports); ) の isEq の値を出力したところ、 false が返されました。これは、以前に取得した結果と矛盾しています。

PS: Counter.printNextCount() を使用してアクセスしないでください。エラー メッセージが表示されるだけです

API は説明を提供します

http://nodejs.org/api/modules.html

エクスポートは module.exports への参照であるため、コンストラクターなどの単一の項目をエクスポートする場合は、代わりに module.exports を直接使用する必要があることに注意してください。
エクスポートは単なる module.exports です。アドレス参照。 Nodejs は module.exports のポイントのみをエクスポートします。exports ポインターが変更された場合、exports は module.exports をポイントしなくなったことを意味するため、エクスポートされなくなります

他の理解を参照してください:

http://www.hacksparrow.com/node-js-exports-vs-module-exports.html

http://zihua.li/2012/03/use-module-exports-or-exports-in-node/

module.exports は実際のインターフェースであり、exports はその補助ツールにすぎません。最終的に呼び出しに返されるのは、exports ではなく module.exports です。
エクスポートによって収集されたすべての属性とメソッドは Module.exports に割り当てられます。もちろん、これには前提があります。つまり、module.exports 自体にはプロパティやメソッドがありません。
module.exports にすでにいくつかのプロパティとメソッドがある場合、exports によって収集された情報は無視されます。

exports と module.exports は

をカバーします

上記でも、基本的には、exports と module.exports の関係と違いを理解していますが、printNextCount() メソッドに対して、exports と module.exports が同時に存在する場合、結果はどうなりますか?

私から Nodejs を学ぶ (3) --- Node.js module_javascript スキル

通話結果

私から Nodejs を学ぶ (3) --- Node.js module_javascript スキル

結果からエラーが報告されていないことがわかり、この方法で定義できることを示していますが、最終的には module.exports がエクスポートをオーバーライドします

結果はエラーを報告しませんが、この方法で使用すると開発中に必ず問題が発生するため、

1. module.exports とexports を個別に定義しないことをお勧めします

2. NodeJs 開発者は、module.exports を使用してオブジェクトをエクスポートし、exports

を使用して複数のメソッドと変数をエクスポートすることをお勧めします。

その他...

API には他にもメソッドが用意されているので、詳細は説明しません。上記の例に基づいて、出力すればすぐにわかります。

モジュール.id

文字列型のモジュール識別子 (通常は完全に解析されたファイル名) を返します

モジュール.ファイル名

完全に解析された文字列型のファイル名を返します

Module.loaded

ロードが完了したかどうかを示すブール型を返します

module.parent

このモジュールを参照するモジュールを返します

module.children

このモジュールによって参照されるすべてのモジュール オブジェクトの配列を返します

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WLAN拡張モジュールが停止しました[修正] WLAN拡張モジュールが停止しました[修正] Feb 19, 2024 pm 02:18 PM

Windows コンピュータの WLAN 拡張モジュールに問題がある場合、インターネットから切断される可能性があります。この状況はイライラすることがよくありますが、幸いなことに、この記事では、この問題を解決し、ワイヤレス接続を再び正常に動作させるのに役立ついくつかの簡単な提案を提供します。 WLAN 拡張モジュールが停止しました。 WLAN 拡張モジュールが Windows コンピュータで動作を停止した場合は、次の提案に従って修正してください。 ネットワークとインターネットのトラブルシューティング ツールを実行して、ワイヤレス ネットワーク接続を無効にし、再度有効にします。 WLAN 自動構成サービスを再起動します。 電源オプションを変更します。 変更します。詳細な電源設定 ネットワーク アダプター ドライバーを再インストールする いくつかのネットワーク コマンドを実行する それでは、詳しく見てみましょう

WLAN 拡張モジュールを開始できません WLAN 拡張モジュールを開始できません Feb 19, 2024 pm 05:09 PM

この記事では、無線 LAN 拡張モジュールが起動できないことを示すイベント ID10000 を解決する方法について詳しく説明します。このエラーは、Windows 11/10 PC のイベント ログに表示される場合があります。 WLAN 拡張モジュールは、独立系ハードウェア ベンダー (IHV) および独立系ソフトウェア ベンダー (ISV) がカスタマイズされたワイヤレス ネットワーク機能をユーザーに提供できるようにする Windows のコンポーネントです。 Windows のデフォルト機能を追加することで、ネイティブ Windows ネットワーク コンポーネントの機能を拡張します。 WLAN 拡張モジュールは、オペレーティング システムがネットワーク コンポーネントをロードするときに、初期化の一部として開始されます。無線 LAN 拡張モジュールに問題が発生して起動できない場合、イベント ビューアのログにエラー メッセージが表示されることがあります。

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Python で一般的に使用される標準ライブラリとサードパーティ ライブラリ 2-sys モジュール Python で一般的に使用される標準ライブラリとサードパーティ ライブラリ 2-sys モジュール Apr 10, 2023 pm 02:56 PM

1. sys モジュールの紹介 前に紹介した os モジュールは主にオペレーティング システム用ですが、この記事の sys モジュールは主に Python インタプリタ用です。 sys モジュールは Python に付属するモジュールで、Python インタープリターと対話するためのインターフェイスです。 sys モジュールは、Python ランタイム環境のさまざまな部分を処理するための多くの関数と変数を提供します。 2. sys モジュールの一般的に使用されるメソッド: dir() メソッドを使用して、sys モジュールにどのメソッドが含まれているかを確認できます: import sys print(dir(sys))1.sys.argv - コマンド ライン パラメーター sys を取得します。 argv は、プログラムの外部からコマンドを実装するために使用されます。プログラムにはパラメータが渡され、コマンド ライン パラメータの列を取得できます。

Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説 Pythonプログラミング:名前付きタプルの使い方のポイントを詳しく解説 Apr 11, 2023 pm 09:22 PM

はじめに この記事では、Python コレクション モジュールの紹介に引き続き、今回はその中の名前付きタプル、つまり、namedtuple の使い方を主に紹介します。これ以上の苦労はせずに、始めましょう – いいね、フォロー、転送することを忘れないでください~ ^_^名前付きタプルの作成 Python コレクションの名前付きタプル クラスnamedTuples は、タプル内の各位置に意味を与え、コードの読みやすさを向上させます。これらは通常のタプルが使用される場所ならどこでも使用でき、位置インデックスではなく名前によってフィールドにアクセスする機能を追加します。これは、Python 組み込みモジュール コレクションから取得されます。使用される一般的な構文は次のとおりです。 import collections XxNamedT

Nodeのイベントループについて話しましょう Nodeのイベントループについて話しましょう Apr 11, 2023 pm 07:08 PM

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

See all articles