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 テーブル内の行を削除する実用的な方法

推薦する

NestJsはMongooseを使用してMongoDBを操作する

最近、NestJs フレームワークを学び始めました。学習コストは他のフレームワークよりもはるかに高く...

Linux での MySQL 5.6.33 のインストールと設定のチュートリアル

このチュートリアルでは、LinuxでのMySQL 5.6.33のインストールと設定方法を参考までに紹...

FileZilla 425 FTP に接続できない (Alibaba クラウド サーバー) の解決策

Alibaba Cloud ServerがFTPに接続できないFileZilla 425 データ接続...

MySQL クラスタの詳細な説明: 1 つのマスターと複数のスレーブのアーキテクチャ実装

実験環境: 1. CentOS 7 サーバー 3 台2. mysql5.7.26 (3台のマシンはす...

MySQL と Golan 間の従来の分散トランザクションのための 7 つのソリューション

目次1. 基本理論1.1 取引1.2 分散トランザクション2. 分散トランザクションソリューション2...

Ubuntu 16.04 64 ビット版の VMware Tools のインストールと構成のグラフィック チュートリアル

この記事では、VMware Toolsのインストールと構成に関するグラフィックチュートリアルを参考と...

ロンボク実装 JSR-269

序文導入Lombok は、Google Guava と同様に便利なツールであり、強くお勧めします。す...

非常に便利な CSS 開発ツール 8 つを紹介

CSS3 パターン ギャラリーこの CSS3 パターン ライブラリには、純粋な CSS3 を使用して...

Dockerコンテナ間で通信する3つの方法

Docker コンテナは互いに分離されており、相互にアクセスできないことは誰もが知っていますが、依存...

MySQL 8.0.16 winx64 のインストールと設定方法のグラフィックチュートリアル (win10 の場合)

この記事では、MySQL 8.0.16 winx64のインストールと設定の具体的な方法を記載します。...

Vue3 の ref toRef と toRefs の違いを理解する方法

目次1. 基本1.参照2. 参照3. 参照4. 最適な使い方2. 詳細な1. なぜrefが必要なのか...

jQuery は拡張アニメーションによるナビゲーション バー効果を実装します

展開アニメーション効果のあるナビゲーションバーを設計してカスタマイズし、デモを作成してみました。設計...

MySQLの結合の基本原理についての簡単な説明

目次結合アルゴリズム駆動テーブルと非駆動テーブルの違い1. 単純なネストループ結合、単純なネスト、イ...

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

Mysql は人気があり、使いやすいデータベース ソフトウェアです。以下は、mysql の無料インス...

WeChatアプレットがシンプルな計算機機能を実装

WeChatアプレット:シンプルな計算機、参考までに、具体的な内容は次のとおりです。ミニプログラムに...