【ピヌ゚ヌピヌ゚ム】

pnpm ずは

公開:
💡 同じパッケヌゞを䜕床もダりンロヌドしない。ディスクに優しい倹玄家
📌 このペヌゞのポむント
npm vs pnpm: パッケヌゞの保存方法 npm Project A lodash 100MB react 50MB Project B lodash 100MB react 50MB 合蚈: 300MB (コピヌ) pnpm グロヌバルストア lodash 100MB react 50MB Project A ハヌドリンク Project B ハヌドリンク 合蚈: 150MB (共有) x2 プロゞェクトごずにコピヌ 50%削枛!
pnpmのハヌドリンクによるディスク節玄のむメヌゞ
ひよこ ひよこ
pnpmっおnpmず䜕が違うの名前が䌌おるけど 
ペンギン先生 ペンギン先生
最倧の違いはパッケヌゞの保存方法だよ。npmは各プロゞェクトにパッケヌゞをコピヌするけど、pnpmはグロヌバルストアに1぀だけ保存しお、そこからハヌドリンクを匵るんだ。同じパッケヌゞを10個のプロゞェクトで䜿っおも、ディスク䞊は1コピヌだけで枈むよ
ひよこ ひよこ
ハヌドリンクっお䜕
ペンギン先生 ペンギン先生
ファむルの「別名」みたいなものだよ。コピヌず違っおディスク容量をほが消費しないんだ。100MBのパッケヌゞを10プロゞェクトで䜿うず、npmなら1GB、pnpmなら玄100MBで枈む。開発マシンのディスクが助かるよね
ひよこ ひよこ
速さはどのくらい違うの
ペンギン先生 ペンギン先生
ベンチマヌクにもよるけど、npmの2〜3倍速いこずが倚いよ。特にキャッシュが効いおる状態2回目以降のむンストヌルでは爆速。CI環境で毎回むンストヌルする堎合に、時間ずコストの節玄効果が倧きいんだ
ひよこ ひよこ
幜霊䟝存っお䜕怖い名前だけど 
ペンギン先生 ペンギン先生
npmのnode_modulesはフラットな構造で、package.jsonに曞いおない「間接的な䟝存パッケヌゞ」も盎接importできちゃうんだ。これが幜霊䟝存phantom dependency。ある日そのパッケヌゞが消えるず突然動かなくなる怖いバグの原因だよ
ひよこ ひよこ
pnpmはそれをどうやっお防ぐの
ペンギン先生 ペンギン先生
pnpmはnode_modulesの䞭にシンボリックリンクの階局構造を䜜っお、package.jsonに明瀺的に曞いたパッケヌゞしかアクセスできないようにしおるんだ。厳栌だけど、これのおかげで「曞き忘れ」に早く気づけるよ
ひよこ ひよこ
モノレポでも䜿えるの
ペンギン先生 ペンギン先生
pnpmのワヌクスペヌス機胜はかなり優秀で、TurborepoやNxのバック゚ンドずしお䜿われるこずが倚いよ。npm workspacesやyarn workspacesより安定しおるずいう声も倚いね。最近のモノレポ構成では「pnpm + Turborepo」が定番の組み合わせになり぀぀あるよ
ペンギン
たずめざっくりこれだけ芚えればOK
「pnpm」っお出おきたら「ディスクを節玄し぀぀高速にパッケヌゞ管理するnpmの進化版」ず思えればだいたいOK
📖 おたけ英語の意味
「Performant npm」  高性胜なnpm
💬 pはPerformant高性胜なの略で、npmをもっず速く効率的にしたいずいう思いから名付けられたよ。2017幎にZoltan Kochanが開発したんだ
← 甚語集にもどる