よく ある質問 (FAQ)
なぜ、 node_modules フォルダは、パッケージがグローバルストアに保存されている場合にディスク容量を使用するのですか?
pnpm は、 ハードリンク を、グローバルストアからプロジェクトの node_modules フォルダーに作成します。 ハードリンクは、元の ファイルがあるディスク上の同じ場所を指します。 例えば、1MBを占める foo を依存に持つプロジェクトでは、そのプロジェクト配下の node_modules フォルダが、リンク元のグローバルストアと同じ 1MB を消費しているように見えます。 ただし、2つの異なるリンクが示す、占有されている 1MB はディスク上の 同じ位置 にあります。 そのため、全体で foo は 2MB ではなく 1MB のみ占有しています。
このテーマの詳細について:
Windowsで動作しますか?
簡単な答え:はい。 詳細な答え: Windows 上でシンボリックリンクを使用することに関しては少なくとも問題はありますが、しかし、pnpm には回避策があります。 Windows では、代わりに ジャンクション を使用します。
しかし、ネストされた node_modules アプローチは Windows と互換性がありますか?
npmの初期のバージョンでは、すべての node_module をネストす るため、問題がありました。(こちらのIssueをご覧ください) しかし、現在 pnpm は依存関係ツリーの構造を作成するのに深いフォルダを作成するのではなく、パッケージをフラットに保存し、それをシンボリックリンクを通じて使用します。
循環シンボリックリンクはどうですか?
pnpm はリンクを使って依存関係を node_modules フォルダに置きますが、親パッケージは依存関係があるのと同じ node_modules フォルダに置かれるため、循環するシンボリックリンクは避けられます。 つまり、foo の依存関係は foo/node_modules にあるのではなく、foo は自身の依存関係とともに node_modules にあるのです。