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 のインストールと展開の詳細なチュートリアル

推薦する

JavaScript における型の必須および暗黙的な変換の詳細な説明

目次1. 暗黙的な変換二重等号での変換ブール型変換「+」と「-」 2. 強制型変換' ...

QQブラウザ機能を実装するためのCSS

コード知識ポイント1. fullpage.jsを組み合わせてフルスクリーンスクロールを実現する2. ...

JavaScriptはシンプルな計算機能を実装します

この記事では、参考までに、簡単な計算機能を実装するためのJavaScriptの具体的なコードを紹介し...

PHP クラスにおける static と self の違いの簡単な分析

メソッドが定義されているクラスに応じて、現在のクラスへの静的参照を取得するには、self:: または...

CSSでプロセスナビゲーション効果を実現する(3つの方法)

CSS によりプロセスナビゲーション効果を実現します。具体的な内容は以下のとおりです。 ::tip...

PHP で JSON バックスラッシュを削除する例

1. 「stripslashes($_POST['json']);」メソッドを使用し...

HTMLは実際にはいくつかの重要なタグを学ぶアプリケーションです

「これは革命になるだろう」という記事が出たあと。業界の皆様に認知され、もちろん内外からの評価もいただ...

CSS3は赤い封筒を振る効果を実現します

赤い封筒の揺れ効果を実現するには要件があります。これまでやったことがないので、記録しておきます。ヘヘ...

Docker で MySQL をデプロイする詳細なプロセス (Docker でデプロイされる一般的なアプリケーション)

以前にも紹介しました: docker (一般的なアプリケーションのデプロイ): docker dep...

vue-element-admin プロジェクトのインポートとエクスポートの実装

vue-element-admin インポートコンポーネントのカプセル化テンプレートとスタイルまず、...

Jmeterはデータベースプロセスダイアグラムに接続します

1. MySQL jdbc ドライバー (mysql-connector-java-5.1.28.j...

CSS 画像アニメーション効果のサンプルコード(フォトフレーム)

この記事では、CSS 画像アニメーション効果(フォトフレーム)のサンプルコードを紹介し、皆さんと共有...

MySQLウィンドウ関数の具体的な使用法

目次1. ウィンドウ関数とは何ですか? 1. ウィンドウをどのように理解しますか? 2. ウィンドウ...

Dockerコンテナのインポ​​ートとエクスポートに関するチュートリアル

背景Docker の人気は、コンテナの共有と移植が容易であることと密接に関係しています。ユーザーは、...

docker インストール後に hello-world を実行する問題を解決する

yumを使用してcentos7.3にDocker V1.13.1をインストールしましたしかし、doc...