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

紹介と情報

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 までご連絡ください。
ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。