pnpm — Performant npm — 은 가장 무거운 npm 사용자가 가진 두 구체 불만을 fix 하려고 만들어졌어: 낭비된 디스크 공간과 phantom dependencies. 둘 다 해결, 더 빠르게, 같은 package.json 으로. 그래서 pnpm 이 이 quest 에서 가장 쉬운 'npm 떠나기' 마이그레이션.
디스크 공간. npm 이 모든 패키지를 모든 프로젝트의 node_modules 에 복사. 10개 프로젝트가 React 쓰면 React 가 디스크에 10번. pnpm 은 모든 패키지 버전을 ~/.pnpm-store/ 의 글로벌 content-addressable store 에 한 번 저장, 각 프로젝트의 node_modules 에 hard link 만듦. Hard link 는 inode 레벨로 디스크 공유; 파일은 디스크에서 물리적으로 같지만 여러 path 에서 reach 가능. 결과: 전체적으로 50-70% 적은 디스크 사용 + 바이트가 이미 있어서 install 극적으로 빠름.
Phantom dependencies. npm 의 flat node_modules 가 코드를 package.json 에 선언 안 된 패키지 우연히 import. pnpm 은 strict 중첩 구조 사용 — 명시적으로 선언한 패키지만 reach. 코드가 import x from 'lodash' 하지만 pnpm add lodash 안 했으면 즉시 실패. Strictness 가 기능.
pnpm v10 (2025년 1월) 이 디폴트 보안 추가 — lifecycle scripts (postinstall 등) 가 패키지 별로 opt-in 안 하면 차단. 이 한 변경이 supply-chain 공격의 큰 클래스 제거 — 악성 패키지의 postinstall script 가 모든 install 마다 임의 코드 실행. SHA256 hashing 전체. 더 빠른 cold install 위한 실험적 Global Virtual Store.
pnpm 이 npm 과 같은 package.json 읽음. lockfile 은 package-lock.json 대신 pnpm-lock.yaml. CLI surface 가 대부분 drop-in 호환. 마이그레이션은 한 pnpm import 명령.