よくある質問 (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
にあるのです。