技術共有

パッケージマネージャー - npm、yarn、cnpm、pnpm の比較

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. npm (ノードパッケージ管理)

1.1 ローカルインストール

コマンドを使用します: npm install パッケージ名 または npm i パッケージ名
ローカルにインストールされたパッケージは、現在のディレクトリの下の node_module ディレクトリに表示されます
ローカルにインストールされたパッケージに CLI がある場合、npm はその CLI スクリプトをnode_modules/.bin に配置し、npx コマンドを使用してそれを呼び出します。

1.2 グローバルインストール

グローバルにインストールされたパッケージは、特別なグローバル ディレクトリに配置されます。
コマンド npm install --global パッケージ名または npm i -g パッケージ名を使用します。
グローバルにインストールされたパッケージはすべてのプロジェクトで使用できるわけではなく、グローバル CLI ツールのみを提供します。ほとんどの場合、パッケージをグローバルにインストールする必要はありません。

1.3 インストールコマンド

本番環境に依存する
npm i パッケージ名
npm i --パッケージ名を保存
npm i -S パッケージ名
依存関係を開発環境にインストールする
npm i --save-dev パッケージ名
npm i -D パッケージ名

1.4. nodejs を使用してモジュールをインポートする場合、モジュールのパスが ./ または.../ で始まらない場合、node はインポートされたモジュールが node_modules ディレクトリからのものであると認識します。
1.5.npmスクリプト

package.json の script フィールドで一般的に使用される CLI コマンドを構成し、npm run スクリプト名を使用してスクリプトを実行します。 npx はスクリプト内で省略できます。

2. npm に関する過去の問題:

  • 依存関係ディレクトリが深くネストされている: 以前は、npm 依存関係がネストされており、Windows システムは深すぎるディレクトリをサポートできませんでした。
  • ダウンロード速度が遅い: ネストレベルが深いため、パッケージのダウンロードは連続的にのみ可能であり、同じバージョンの複数のパッケージが繰り返しダウンロードされます。
  • コンソール出力は複雑です。多くのパッケージ詳細が出力されます。
  • プロジェクト移植の問題: 以前は、package.json 構成ファイルのみがあり、package-lock.json ファイルはありませんでした。

3. 糸の登場には次の利点があります。

  • フラットなディレクトリ構造を使用する
  • 並列ダウンロード
  • ローカルキャッシュを使用する
  • コンソール出力情報を合理化し、主要な情報のみを出力します。
  • 正確な依存関係を記録するには、yarn-lock ファイルを使用します

4. 糸の影響を受けて、npm6 は糸の高度な概念を活用し、次の最適化を行いました。

  • ディレクトリのフラット化
  • 並列ダウンロード
  • ローカルキャッシュ
  • package-lock.json を使用して正確な依存関係を記録する
  • 多数のコマンドエイリアスを追加しました
  • 組み込みの npx により、ローカル CLI ツールを起動できます
  • コンソール出力を大幅に簡素化

5. CNPM

npm のレジストリ サーバーは海外にあるため、ダウンロードが遅くなったり失敗したりする可能性があります。以前は、タオバオはレジストリを変更する機能を提供していませんでしたが、タオバオの npm ミラーも、その他の用途は基本的に npm と同じです。

6. pnpm

  • npm や Yarn と同様に、インストールされたパッケージを保存するためにキャッシュが引き続き使用されます。pnpm-lock.yaml を使用して詳細な依存関係のバージョンを記録する
  • Yarn や npm とは異なり、pnpm はシンボリック リンクとハード リンクを使用して依存関係を配置し、ファイルのコピーを回避し、インストール効率を向上させ、ディスク領域の使用量を大幅に削減します。
  • シンボリック リンクとハード リンクを使用することで、pnpm は Windows システムでのパスが長すぎる問題を回避できるため、ツリー依存関係を使用します。ツリーの依存関係のため、プロジェクトは直接の依存関係のみを使用でき、間接的な依存関係は使用できません。

7. pnpm の原則:

  • ファイルの本質: ファイルは実際には、外部ストレージ アドレス (ハードディスク、USB フラッシュ ドライブ) を指すポインターです。ファイルを削除すると実際にはポインタが削除されるため、非常に高速です。
  • ファイルのコピー: ファイル ポインタが指すコンテンツをコピーし、新しいコンテンツを指す新しいポインタを生成します。
  • ハード リンク: ファイル A ポインタを別のファイル B ポインタにコピーします。 ファイル B はファイル A へのハード リンクです。
  • シンボリック リンク (ソフト リンク): ファイルまたはフォルダー A に対してシンボリック リンク B を作成し、B が A をポイントします。
  • ショートカット: シンボリックリンクと同様、初期の Windows でサポートされていたリンク方法です。ポインタだけでなく、権限、互換性、起動方法などのさまざまな情報が含まれています。ショートカットは Windows システムに固有のものであり、プラットフォーム間で使用されるものではありません。

シンボリックリンクとハードリンクの違い

  • ハード リンクはファイルのみをリンクできますが、シンボリック リンクはファイルとディレクトリをリンクできます。
  • 接続が完了すると、ハード リンクはファイルのコンテンツにのみ関連付けられ、前のリンクとは関係がありません。シンボリック リンクは常に、以前にリンクされたファイルに関連付けられ、コンテンツ ファイルには直接関連付けられません。