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 によるデータ視覚化: ECharts マップの作成

目次概要予防1. 使用方法2. 実装手順予備実装コード効果: Geo共通設定上記の構成を追加した後の...

MySQLデータベース設計:Pythonを使ったスキーマ操作方法の詳しい解説

矢が放たれる前に、弓は矢にささやきました。「お前の自由は私のものだ。」スキーマは矢のようなもので、弓...

Vue-router プログラムナビゲーションの 2 つの実装コード

ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...

最も単純な ErrorBoundary コンポーネントをカプセル化して、React 例外を処理する

序文React 16から、子コンポーネントで発生したエラーを捕捉し、エラーログを記録し、ダウングレー...

Vue テンプレート構成と Webstorm コード形式仕様設定

目次1. コンパイラコードフォーマット仕様設定2. Vueテンプレートの設定1. コンパイラコードフ...

Linux で rpm パッケージを見つけるために CD をマウントする方法

前面に書かれたLinux を使用する際にソフトウェアをインストールする必要がある場合があります。もち...

1 分で Nginx のバージョンをスムーズにアップグレードおよびロールバックする方法

今日は、企業の実際の本番環境でよく遭遇する、Nginx を新しいバージョンにアップグレードし、古いバ...

Linux での MySQL 5.7.18 yum のアンインストールからインストールまでのプロセスの図

いろいろ苦労しましたが、やっと yum インストールの手順がわかりました。以前、バイナリ パッケージ...

MySQL インデックスがソートに与える影響の分析例

この記事では、例を使用して、MySQL インデックスがソートに与える影響を説明します。ご参考までに、...

Centos8 (最小インストール) Python3.8+pip のインストール方法に関するチュートリアル

Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...

Alibaba Cloud Server の詳細な展開 (グラフィック チュートリアル)

最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...

XHTML CSSを使用して正式なブログを書く

ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...

ウェブデザインの経験とスキルの概要

■ ウェブサイトのテーマ計画 ウェブサイトのテーマが断片化しすぎないように注意してください。一般的に...

Linux の一般的な基本コマンドと使用方法

この記事では、一般的な基本的な Linux コマンドとその使用方法を例を使って説明します。ご参考まで...