検索
ホームページウェブフロントエンドjsチュートリアルNode.js での CommonJS モジュール仕様の使用法の概要

Javascript には本質的にモジュールという機能が 1 つ欠けており、CommonJS 仕様の登場によりこの欠点が補われています。 CommonJS 仕様の登場により、フロントエンドとバックエンドの Javascript を統合できるようになりました。 Node は CommonJS の Modules 仕様を利用して、非常に使いやすいモジュール システムを実装します。

1. CommonJS モジュール仕様

CommonJS モジュール仕様は 3 つの部分に分かれています:

1) モジュール参照: require() メソッドを通じてモジュールの API を現在のコンテキストに導入し、モジュール識別子を渡します。 var math = require('math');
2 など)。 モジュール定義: 現在のモジュールのメソッドまたは変数を、exports オブジェクトを通じてエクスポートします。モジュール内にはモジュール オブジェクトもあり、エクスポートは実際にはモジュールの属性です。 Node では、ファイルはモジュールであり、モジュール内の「グローバル変数」は外部からは見えません。exports.add = function() {}; のように、エクスポートにマウントされた属性のみが公開されます。 = 3.1415926;
3). モジュール識別: 実際には、上記の「math」など、require() に渡されるパラメーターであり、camel 命名法に準拠するか、「.」で始まる文字列である必要があります。 " 相対パスまたは絶対パス、ファイル名のサフィックス「.js」を付けることはできません

2. Node モジュールの実装プロセス

Node では、モジュールは 2 つのカテゴリに分けられます。1 つは Node 自体によって提供されるコア モジュールです。 、その他のクラスはユーザー自身が作成したファイル モジュールです。コア モジュールの一部は、Node のソース コードのコンパイル プロセス中にバイナリ ファイルにコンパイルされます。コア モジュールは、Node の起動時にメモリに直接ロードされるため、ロード速度が最も速くなります。ファイル モジュールは実行時に動的にロードされ、パス分析、ファイルの場所、コンパイルと実行の 3 つの手順が必要です。なお、Nodeは二次導入コストを削減するためにインポートしたモジュールをキャッシュしており、同一モジュールの二次ロードは最優先でキャッシュからロードする戦略を採用しています。

2.1 パス分析

パス分析は主に上記のモジュール識別子を分析します。モジュール識別子は主に次のカテゴリに分類されます:

1)、http、fs、path などのコアモジュール
2)、または。 / で始まる相対パス ファイル モジュール 3)、/ で始まる絶対パス ファイル モジュール 4)、ファイルまたはパッケージの形式のカスタム ファイル モジュール。ノードはモジュール パス配列 module.paths に従ってターゲット ファイルを 1 つずつ検索しようとします。通常、現在のディレクトリに沿ってルート ディレクトリまで段階的に node_modules という名前のディレクトリを検索します。そのため、これが最も時間のかかる方法です。それを見つけるために。

2.2 ファイルの場所

パス分析に基づいて、ファイルの場所は次の詳細に注意する必要があります:

1)、ファイル拡張子の分析: CommonJS 仕様では拡張子を入力しないモジュールの識別が許可されているため、Node は.jsを押し、.jsonと.nodeの順序が拡張子に対して不十分な場合は、

2)、ディレクトリ解析、パッケージ化の順に試してください: 上記のファイル拡張子解析後に対応するファイルが見つからないが、ディレクトリが取得された場合, Nodeはディレクトリをパッケージとして扱います


2.3 コンパイルと実行

特定のファイルを見つけた後、Nodeは新しいモジュールオブジェクトを作成し、パスに従ってロードしてコンパイルします。拡張機能が異なると、読み込み方法も異なります:

1)、.js ファイル: fs モジュールを通じてファイルを同期的に読み取り、コンパイルして実行します

2)、.node ファイル: これは C/C++ で書かれた拡張ファイルです。 dlopen() メソッドを通じてロードされます

3)、.json ファイル: fs モジュールを通じて同期的にファイルを読み取り、JSON.parse() を使用して解析して結果を返します
4)、その他の拡張ファイル: すべて としてロードされます。 js ファイル

各モジュール ファイルには、デフォルトで、require、exports、および module という 3 つの変数があることがわかっています。Node の API ドキュメントでも、各モジュールには、Where Did から派生した 2 つの変数 filename と dirname があることがわかっています。それはどこから来たのですか? Node のモジュールは、宣言された「グローバル変数」が実際に他のモジュールを汚染しないことをどのように保証するのでしょうか?実際、Node は JS モジュールのコンパイル中にファイルの内容の先頭と末尾をラップします。以下は、最初から最後までパッケージ化された JS ファイルの例です:

(function(exports, require, module, __filename, __dirname) {
    /* 中间是JS文件的实际内容 */
    var math = require('math');
    exports.area = function(radius) {
        return Math.PI * radius * radius;
    };
    /* JS文件的实际内容结束 */
});

このように、各モジュール ファイルはスコープ分離を持ち、require、exports、module などの変数もコンテキストに挿入されます。モジュールの。これは、CommonJS モジュール仕様の Node の実装です。 C/C++ モジュールとノード コア モジュールのコンパイル プロセスは比較的複雑なので、詳細は説明しません。

3. モジュール呼び出しスタック

以下の図に示すように、Node 内のさまざまなモジュールの呼び出し関係を明確にする必要があります:

C/C++ 組み込みモジュールは最下位のモジュールであり、これは主に、JavaScript コア モジュールとサードパーティの Javascript ファイル モジュールを呼び出すための API を提供します。実際には、そのようなモジュールが公開されることはほとんどありません。 Javascript コア モジュールには 2 つの主な役割があります。1 つはファイル モジュール呼び出し用の C/C++ 組み込みモジュールのカプセル化層およびブリッジ層として機能すること、もう 1 つは下部を処理する必要のない純粋に機能的なモジュールです。層。ファイル モジュールは通常、通常の Javascript モジュールや C/C++ 拡張モジュールなどのサードパーティによって作成されます。

4. パッケージとNPM

4.1 パッケージ構造

パッケージは基本的にアーカイブ ファイル (通常は .zip または .tar.gz) であり、インストール後に解凍してディレクトリに復元できます。 CommonJS のパッケージ仕様は、パッケージ構造とパッケージ説明ファイルの 2 つの部分で構成されます。 CommonJS 仕様に完全に準拠するパッケージ構造には、次のファイルが含まれている必要があります:

1).package.json: パッケージ説明ファイル
2).bin: 実行可能なバイナリ ファイルが保存されるディレクトリ
3).lib: Javascript が格納されるディレクトリコードが保存されます
4).doc: ドキュメントを保存するディレクトリ
5).test: 単体テスト ケースを保存するディレクトリ

4.2 パッケージ説明ファイル

パッケージ説明ファイルは JSON ファイル - package.json で、次の場所にあります。パッケージのルート ディレクトリはパッケージの重要な部分であり、パッケージの一般情報を記述するために使用されます。後で説明する NPM のすべての動作は、このファイルのフィールドと密接に関連しています。以下では、よく知られた Web フレームワーク Express プロジェクトの package.json ファイルを例として使用して、いくつかの一般的なフィールドの意味を説明します。

1).name: パッケージ名
2).description: パッケージの紹介
3).version: バージョン番号。「セマンティック バージョン管理」に準拠する必要があります。http://semver.org/
4) を参照してください。 dependency : 現在のパッケージを使用するために必要なパッケージのリスト。この属性は非常に重要です。NPM は、この属性を通じて依存パッケージを自動的に読み込みます
5).repositories: ソース コードがホストされている場所のリスト

他のフィールドの使用方法については、NPM package.json の説明を参照してください

4.3 NPM 共通機能

NPM (ノード パッケージ マネージャー)、よくノード パッケージ マネージャーと呼ばれます。その主な機能は、インストール、アンインストール、更新、表示、検索、リリースなどのノード パッケージを管理することです。

4.3.1 NPM パッケージのインストール

Node パッケージのインストールは、ローカル インストールとグローバル インストールの 2 種類に分けられます。 2 つの違いは次のとおりです:

1). ローカル インストール npm install : パッケージは現在のディレクトリにダウンロードされ、現在のディレクトリでのみ使用できます。
2). グローバル インストール npm install -g : パッケージは特定のシステム ディレクトリにダウンロードされ、インストールされたパッケージはすべてのディレクトリで使用できます。

4.3.2 NPM パッケージ管理

以下では、一般的に使用されるパッケージ管理コマンドをリストする例として grunt-cli (grunt コマンド ライン ツール) を取り上げます:

1).npm install: の依存関係と依存関係をインストールします。 package.json ファイル devDependency フィールドで宣言されたすべてのパッケージ
2).npm install grunt-cli@0.1.9: 特定のバージョンの grunt-cli をインストールします
3).npm install grunt-contrib-copy --save: インストールgrunt-contrib-copy、依存関係を package.json ファイルに保存します
4).npm uninstall grunt-cli: パッケージをアンインストールします
5).npm list: どのパッケージがインストールされているかを確認します
6).npm public

以上がNode.js での CommonJS モジュール仕様の使用法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

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

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール