【ピーエヌピーエム】
pnpm とは?
最終更新:
💡 同じ部品は倉庫に1つだけ。各プロジェクトには「通路」をつなぐ倹約家
Node.jsのパッケージマネージャーの1つ。パッケージのファイルを1か所のストアに保存してハードリンクで使い回し、シンボリックリンクで依存関係を厳密に区切ったnode_modulesを作る。
📌 このページのポイント
pnpmってnpmと何が違うの?名前が似てるけど…
ハードリンクって何?
速さはどのくらい違うの?
幽霊依存って何?怖い名前だけど…
npmのフラットなnode_modulesでは、package.jsonに書いていない間接的な依存パッケージもプロジェクトから読み込めてしまうことがあるんだ。依存先の都合でそのパッケージが外れると、ある日突然動かなくなるよ。pnpmはnode_modulesの直下に自分で入れたパッケージだけを置くから、書き忘れに早く気づけるんだ
おもしろい!モノレポでも使えるの?
もっと詳しく知りたい人へ
pnpmに切り替えたら、今まで動いていたプロジェクトがエラーになりました。なぜですか?
多くの場合、package.jsonに書いていないパッケージをコードや依存先が使っている(幽霊依存)ことが原因です。npmのフラットなnode_modulesでは偶然読み込めていたものが、pnpmでは見えなくなるためです。公式FAQでは、足りない依存をpackage.jsonに追加する、問題のある依存先を.pnpmfileのフックで補う、またはnodeLinkerの設定でnpmのような巻き上げ型(hoisted)のnode_modulesに切り替える、といった対処が案内されています。
まとめ:ざっくりこれだけ覚えればOK!
「pnpm」って出てきたら「同じパッケージのファイルを使い回して、ディスクと時間を節約するNode.jsのパッケージマネージャー」と思えればだいたいOK!
📖 おまけ:英語の意味
「performant npm」 = 高性能なnpm
💬 公式FAQでは「pnpmはperformant npmの略」と説明されていて、名付け親はRico Sta. Cruzさんだよ