モチベーション
ディスク容量を節約し、インストール速度を向上
npm または Yarn を使用している場合、依存を使用する 100 個のプロジェクトがある場合、 ディスクにその依存関係のコピーが 100 個保存されます。 pnpmを使用すると、依存関係はコンテンツ探索可能なストアに格納され、
- 異なるバージョンのパッケージに依存している場合は、更新されたファイルのみがストアに追加されます。 たとえば、100 個のファイルがある依存において、 新しいバージョンがそれらのファイルのうち 1 つだけに変更を加えた場合、
pnpm update
は存関係全体を複製するのではなく、ストアにその新しいファイルのみを加えます。 - すべてのファイルは、ディスク上の 1 つの場所に保存されます。 パッケージが インストールされると、そのパッケージのファイルは 1 か所からハードリンクされ、追加のディスク領域を消費しません。 これにより、同じバージョンの依存をプロジェクト間で共有できます。
これらの結果、 プロジェクトと依存関係の数に比例してディスク上の領域を節約し、インストールが非常に高速になります。
ネストされた node_modules ディレクトリの作成
npm や Yarn Classic を使用して依存パッケージをインストールする場合、すべてのパッケージはモジュールディレクトリの直下に格納されます。 結果として、ソースコードは、プロジェクトへの依存関係として追加されていない依存関係にアクセスできてしまいます。
デフォルトでは、 pnpmはシンボリックリンクを使用して、プロジェクトの直接の依存関係のみをモジュールディレクトリの直下に追加します。 pnpm が作成する固有の node_modules
構造と、それがNode.jsエコシステムで正常に動作する理由の詳細については、以下をお読みください。
tip
何かのツールがシンボリックリンクでうまく機能しない場合でも、node-linker の設定を hoisted
にすることで pnpm を使い続けることができるかもしれません。 これは、npm や Yarn Classic によって作成されるのに似た node_modules ディレクトリを作成するよう pnpm に指示します。