node.js の require メソッドの読み込みルールの詳細な説明

node.js の require メソッドの読み込みルールの詳細な説明

require メソッドの読み込みルール

  1. キャッシュからの読み込みを優先する
  2. コアモジュール
  3. パス形式のモジュール
  4. サードパーティモジュール

1. キャッシュからの読み込みを優先する

main.js: a.jsモジュールを実行してロードする

'./a' が必要です

a.js: b.jsモジュールを実行してロードし、aがロードされたことを出力します。

'./b' が必要です
console.log('a.js がロードされました')

b.js: 出力bが読み込まれます

console.log('b.js がロードされました')

結果:

ここに画像の説明を挿入

main は a.js をロードし、その後、b.js をロードするときに a.js がロードされたことを 2 回出力しないことがわかります。Node は渡された ID に従って require.cache からオブジェクトのエクスポート値を直接取り出し、モジュール コードを再度実行しません。

2. コアモジュール

コアモジュールの本質もファイルです。コアモジュールファイルはバイナリファイルにコンパイルされています。名前に従ってロードするだけで済みます。のように:

  • 'fs' が必要です
  • 'http' が必要です

3. パスベースのモジュール

ここで取り上げているパスベースのモジュールは、実際には作成した JS ファイルをロードします。ロードする方法は 4 つあります。

var fooExports = require('./index') // 相対パス、一般的に使用 var fooExports = require('../index') // 相対パス、一般的に使用 var fooExports = require('/index') // ルート ディレクトリ、一般的に使用されない var fooExports = require('D:/demo/index') // ルート ディレクトリ、一般的に使用されない

4. サードパーティモジュール

  1. すべてのサードパーティモジュールはnpm経由でダウンロードする必要があります
  2. 使用する際は、require('パッケージ名')でロードできます。
  3. サードパーティのパッケージがコア モジュールと同じ名前を持つことはできません。

これはコア モジュールでも、パスベース モジュールでも、サードパーティ モジュールでもありません。読み込み方法は次のとおりです

var template = require('art-template') を例に挙げます。

  • まず、現在のファイルが配置されているディレクトリ内のnode_modulesディレクトリを見つけます。
  • 次に、ファイル内のメイン属性を次のように探します。
  • メイン属性は、アートテンプレートのエントリモジュールを記録します。
  • 次に、このサードパーティのパッケージをロードして使用しますが、実際には最終的なロードはファイルのままです
  • package.jsonファイルが存在しないか、mainで指定されたエントリモジュールが存在しない場合
  • すると、Node はディレクトリ内で index.js を自動的に見つけます。つまり、index.js がデフォルトのオプションとして使用されます。
  • 上記の条件のいずれも満たされない場合は、親ディレクトリ内の node_modules ディレクトリが検索されます。
  • 前のレベルにない場合は、前のレベルまで検索を続けます。
  • 現在のディスクルートディレクトリがまだ見つからない場合は、エラーメッセージが表示されます: モジュールxxxが見つかりません

サードパーティモジュールの検索順序: node_modules/art-template > package.json ファイル > メインプロパティ > index.js

これで、node.js の require メソッドの読み込みルールの詳細説明に関するこの記事は終了です。node.js の require メソッドの読み込みルールに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Node.js の require.resolve メソッドの紹介
  • node.js の require 読み込みメカニズムの簡単なシミュレーション
  • Node.js require() ソースコード解釈
  • node.js の require の詳細な説明
  • Node.jsはモジュールをロードするためにrequire()関数を使用します
  • Node.js における require の動作原理の簡単な分析

<<:  Centos7のFirewalldファイアウォールの基本コマンドの詳細な説明

>>:  MySql テーブル内の行を削除する実用的な方法

推薦する

JS でページのスクリーンショット機能を実装する方法

「ページのスクリーンショット」は、ページポスターの生成、ポップアップ画像の共有など、フロントエンドで...

フロントエンドネットワーク、JavaScriptの最適化、開発のヒントについて簡単に説明します。

1. ネットワークの最適化YSlowには23のルールがあります。これら数十のルールは、主に、不要な...

CSSテキストシャドウの徐々にぼやける効果の実装

テキストシャドウテキストに影を追加します。テキストとテキスト装飾に複数のシャドウを追加することができ...

Vue v-for ループを書く 7 つの方法

目次1. v-forループでは常にキーを使用する2. 特定のスコープ内でv-forループを使用する3...

WeChatミニプログラムはどのようにしてユーザー情報とユーザーの電話番号を同時に取得するのか

今日ログインページを書いていたとき、個人情報と携帯電話番号を認証する必要がありましたが、ページにボタ...

Linux パーティションまたは論理ボリュームにファイルシステムを作成する方法

序文システムにファイル システムを作成し、それを永続的または非永続的にマウントする方法を学習します。...

Dockerでランナーコンテナを構成する方法

1. ランナーコンテナを作成する mk@mk-pc:~/Desktop$ docker run -d...

英語の単語の出現頻度を数えるtrコマンドの魔法

置換を削除したり文字列を削除したりできる tr コマンドは、誰もがよく知っています。 英語では、英語...

MySQLの暗黙的な変換問題の解決

1. 問題の説明 root@mysqldb 22:12: [xucl]> テーブル t1\G ...

Google ブラウザのラベルと入力間のスペースに関する小さな問題

最初にコード、次にテキストコードをコピーコードは次のとおりです。 <!DOCTYPE html...

MySQL ALTERコマンドの知識ポイントのまとめ

テーブル名を変更したり、テーブル フィールドを変更したりする必要がある場合は、 MySQL ALTE...

JavaScript のカンマ式が含まれている場合について

JavaScript の if ステートメントで英語のカンマ「,」が表示されることがあります。これは...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル (Windows 版)

1. はじめにプロジェクトではMySQLを使用しています。インターネット上の例を参考にインストール...

nginx のロケーションで URI の傍受を実装する方法

例:場所のルートとエイリアスルートディレクティブは、ルートによって設定されたディレクトリに検索ルート...

MySQL 5.7.17 のインストールと設定のグラフィックチュートリアル

ブロガーはこう述べています。「私は『史上最も簡単な MySQL チュートリアル』という一連のブログ記...