Node.js のモジュール性、npm パッケージ マネージャーの説明

Node.js のモジュール性、npm パッケージ マネージャーの説明

モジュール化の基本概念

モジュール化とは何か

モジュール化とは、複雑な問題を解決する際に、システムを上から下まで複数のモジュールに分割するプロセスを指します。システム全体において、モジュールは結合、分解、交換が可能なユニットです。

モジュールは Node.js アプリケーションの基本コンポーネントであり、ファイルとモジュールの間には 1 対 1 の対応があります。つまり、Node.js ファイルはモジュールであり、JavaScript コード、JSON、またはコンパイルされた C/C++ 拡張機能である可能性があります。

プログラミングにおけるモジュール性とは、固定されたルールに従って、大きなファイルを複数の独立した相互依存する小さなモジュールに分割することを意味します。

モジュール分解の利点

  • コードの再利用性が向上しました。
  • コードの保守性が向上しました。
  • オンデマンドロードが可能です。

Node.js のモジュール性

Node.js のモジュールの分類

Node.js では、モジュールはソースに応じて 3 つのカテゴリに分類されます。

1. 組み込みモジュール(組み込みモジュールは、fs、path、http など、Node.js によって公式に提供されています)

2. カスタムモジュール(ユーザーが作成した各.jsファイルはカスタムモジュールです)

3. サードパーティモジュール(サードパーティが開発したモジュール、公式に提供された組み込みモジュールやユーザーが作成したカスタムモジュールではなく、使用前にダウンロードする必要があるモジュール)

モジュールの読み込み

require() メソッドを使用すると、必要な組み込みモジュール、ユーザー定義モジュール、サードパーティ モジュールをロードして使用できます。

//組み込みの fs モジュールをロードします。const fs = require('fs')
 
// ユーザー定義モジュールをロードする const custom = require('./custom.js')
 
//サードパーティのモジュールをロードする const moment = require('moment')

注意: require() メソッドを使用して他のモジュールをロードすると、ロードされたモジュールのコードが実行されます。

モジュールのスコープ

関数スコープと同様に、カスタム モジュールで定義された変数、メソッド、およびその他のメンバーには、現在のモジュール内でのみアクセスできます。このモジュール レベルのアクセス制限は、モジュール スコープと呼ばれます。

//ファイル: 01.custom.js
const username = '张三' //モジュールスコープで定数ユーザー名を定義する
関数 sayHello(){
   console.log('Hello everyone, I am:' + username) //モジュールスコープでsayHello関数を定義する
}
 
//ファイル: 02.custom.js
const custom = require('./01.custom') // 01.custom ファイルをインポート console.log(custom)  
// 出力 {} 空のオブジェクト。01.custom.js モジュールのプライベート メンバーは 02.custom.js モジュールではアクセスできません

モジュールスコープのメンバーを外部に共有する

モジュールオブジェクト

各 .js カスタム モジュールにはモジュール オブジェクトがあり、現在のモジュールに関連する情報を格納します。

カスタム モジュールでは、module.exports オブジェクトを使用して、モジュール内のメンバーを外部で共有できます。 外部が require() メソッドを使用してカスタム モジュールをインポートすると、取得されるのは module.exports によって指されるオブジェクトです。

注意: require() メソッドを使用してモジュールをインポートする場合、インポートの結果は常に module.exports が指すオブジェクトに基づきます。

例えば:

//ファイル: 01.custom.js
module.exports.username = 'zs' // module.exports オブジェクトに属性 username をマウントします
module.exports.sayHello = function(){
   console.log('Hello') //モジュールスコープでsayHello関数を定義する
}
module.exports = { // module.exports が新しいオブジェクト nickname:'Xiao Ming' を指すようにします。
   こんにちは(){
     console.log('こんにちは!')
   }
}
 
//ファイル: 02.custom.js
const custom = require('./01.custom.js') // 01.custom ファイルをインポート console.log(custom)  
//出力 { nickname:'Xiao Ming', sayHi:[Function:sayHi]}

エクスポートオブジェクト

module.exports という単語は書き方が複雑なので、Node は、メンバーを外部で共有するコードを簡素化するために exports オブジェクトを提供します。デフォルトでは、エクスポートと module.exports は同じオブジェクトを参照します。最終的な共有結果は、依然として module.exports によって指されるオブジェクトに基づいています。

エクスポートと module.exports の誤用

モジュールを require() すると、常に module.exports によって指されるオブジェクトが取得されます。したがって、混乱を防ぐために、同じモジュール内で exports と module.exports の両方を使用しないことをお勧めします。

注: 各モジュール内では、モジュール変数は現在のモジュールを表します。

モジュール変数はオブジェクトであり、そのエクスポートプロパティ(つまり、module.exports)は外部インターフェースです。

モジュールをロードすると、実際にはモジュールの module.exports プロパティがロードされます。モジュールをロードするには、require() メソッドが使用されます。

npmとパッケージ

バッグ

Node.js のサードパーティ モジュールはパッケージとも呼ばれます。 コンピュータとコンピューターが同じものを指すのと同じように、サードパーティのモジュールとパッケージは、名前が異なるだけで同じ概念を指します。

Node.js の組み込みモジュールは低レベルの API のみを提供するため、組み込みモジュールに基づいてプロジェクトを開発する場合、効率が非常に低くなります。 パッケージは組み込みモジュールに基づいてカプセル化されており、より高度で便利な API を提供し、開発効率を大幅に向上させます。 パッケージと組み込みモジュールの関係は、jQuery とブラウザの組み込み API の関係に似ています。

パッケージのダウンロード方法

npm, Inc. は、https://registry.npmjs.org/ サーバーから必要なパッケージをダウンロードしてローカルで使用できるパッケージ管理ツールを提供しています。 このパッケージ管理ツールの名前は Node Package Manager (略して npm パッケージ管理ツール) です。このパッケージ管理ツールは、Node.js インストール パッケージと一緒にユーザーのコンピューターにインストールされます。 ターミナルで npm -v コマンドを実行すると、コンピューターにインストールされている npm パッケージ管理ツールのバージョンを表示できます。

まず、ウィンドウのロゴと R を使って開き、「cmd」と入力し、ウィンドウを開いて「npm -v」と入力します。

プロジェクトにパッケージをインストールするコマンド

使用するソフトウェアはWebStorm2021です。以下の手順はすべてWebStorm2021ソフトウェアのターミナルで実行されます。

npm install パッケージのフルネーム(npm install コマンド実行時に、最後に -g パラメータを追加すると、パッケージはグローバル パッケージとしてインストールされます。)

パッケージがインストールされると、プロジェクト フォルダーに node_modules というフォルダーと package-lock.json 構成ファイルが表示されます。

node_modules フォルダーは、プロジェクトにインストールされたすべてのパッケージを保存するために使用されます。 require() がサードパーティのパッケージをインポートする場合、このディレクトリからパッケージを検索してロードします。 package-lock.json 構成ファイルは、パッケージ名、バージョン番号、ダウンロード アドレスなど、node_modules ディレクトリ内の各パッケージのダウンロード情報を記録するために使用されます。

注意: インストール パッケージは、良好なネットワーク環境で実行する必要があります。

特定のバージョンのパッケージをインストールする

npm install コマンドを使用してパッケージをインストールすると、パッケージの最新バージョンが自動的にインストールされます。特定のバージョンのパッケージをインストールする必要がある場合は、パッケージ名の後に @ 記号を使用して特定のバージョンを指定できます。例: npm install [email protected]

注: npm install コマンド (または npm i) を実行すると、すべての依存パッケージを一度にインストールできます。 (これは node_modules プロジェクトを削除した後です)。

パッケージをアンインストールする

パッケージをアンインストールするコマンドは、npm uninstall パッケージのフルネームです。

ダウンロード速度が遅い問題を解決する

ダウンロード速度が遅いのはなぜですか?

npm を使用してパッケージをダウンロードする場合、デフォルトでは海外の https://registry.npmjs.org/ サーバーからダウンロードされます。このとき、ネットワーク データの伝送には長い海底光ケーブルを経由する必要があるため、ダウンロード速度が非常に遅くなります。

ソリューション 1 - Taobao NPM ミラー サーバー

Taobao は、海外の公式サーバーから国内サーバーにパッケージを同期し、中国でパッケージのダウンロード サービスを提供するために特別に設計されたサーバーを中国に構築しました。 これにより、梱包のスピードが大幅に向上します。 (ミラーリングはファイル ストレージの形式であり、1 つのディスク上のデータが別のディスク上に同一のコピーとして存在します。)

解決策2 - npmパッケージミラーソースを切り替える

パッケージのミラー ソースは、パッケージがダウンロードされるサーバー アドレスを指します。

ソリューション 3 - nrm

パッケージのミラーソースをより便利に切り替えるために、nrmツールをインストールすることができます。nrmが提供するターミナルコマンドを使用すると、パッケージのミラーソースをすばやく表示および切り替えることができます。

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Node.js におけるモジュール化の詳細な説明
  • NodeJSのモジュール性に関する詳細な説明
  • Node.js のバッファ オブジェクトとその作成方法
  • node.JS バイナリ操作モジュールにおけるバッファオブジェクトの使用方法の詳細な説明
  • nodeJSバイナリバッファオブジェクトの詳細な説明
  • Node.js のモジュール化メカニズムと Buffer オブジェクトの詳細な説明

<<:  Prometheus を使用して、MySQL の自動増分主キーの残りの使用可能パーセンテージをカウントします。

>>:  Nginx Linux のインストールと展開の詳細なチュートリアル

推薦する

Node.js における非同期プログラミングの知識ポイントの詳細な説明

導入JavaScript はデフォルトでシングルスレッドであるため、コードは並列実行するための新しい...

JavaScriptのクローン作成についての簡単な説明

目次1. 浅いクローニング2. ディープクローニング1. 浅いクローニング浅いクローンでは配列やオブ...

MySQL 8.0.23のルートパスワードをリセットするための最適なソリューション

この方法は2021年2月7日に編集されました。私が使用しているバージョンは8.0.23です。事件の原...

JavaScript の条件付きアクセス属性と矢印関数の紹介

目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...

MySQLdump コマンドを使用した MySQL データの移行

このソリューションの利点はシンプルさと使いやすさですが、欠点はダウンタイムが長くなることです。 した...

JavaScript イベント委任 (プロキシ) の使用例の詳細

目次導入例: イベントの委任記述方法1: イベント委譲書き方2: 各子要素がイベントをバインドする例...

純粋な HTML+CSS でオリンピック リングを実装するためのサンプル コード

レンダリング コード - 青と黄色のリングを例に挙げます <div class="コ...

CocosCreator ScrollView 最適化シリーズ: フレーム読み込み

目次1. はじめに2. 行き詰まった問題の分析3. 解決策(理論) 4. ソリューション(コード) ...

画像のシームレスなスクロールを実現する JavaScript タイマー

この記事では、画像のシームレスなスクロールを実現するためのJavaScriptの具体的なコードを参考...

JS に依存せずにレスポンシブ レイアウトを実現する CSS3 モバイル vw+rem メソッド

1. はじめに(1)vw/vhの紹介使用する前に、vw と rem とは何か、その機能について簡単に...

HTML テーブルに複雑なテーブル ヘッダーを実装するためのサンプル コード

複雑な表を作成するには HTML を使用します。複雑なテーブルでは通常、td の rowspan 属...

Centos8 で yum を使用して rabbitmq をインストールするチュートリアル

/etc/yum.repos.d/フォルダに入るrabbitmq-erlang.repo ファイルを...

MySQL のレイテンシ問題とデータフラッシュ戦略プロセスの分析

目次1. MySQLレプリケーションプロセス2. MySQLの遅延問題の分析3. プロモーション期間...

写真のプレビューとアップロード機能を実現するhtml+css+js

はじめに: Web ページを作成するときに、画像をアップロードする必要がある場合がよくあります。画像...

ウェブサイトのデザイン体験のための7つの異なるカラースキーム

ウェブサイト構築におけるカラーマッチングは非常に特殊であり、ウェブサイトのテーマ、感情、雰囲気などの...