npm — Node Package Manager — 가 2009년 Node.js ship 이후 디폴트 JavaScript 패키지 매니저. 이 quest 의 모든 대안보다 더 오래되고, 덜 영리하고, 더 느려. 그리고 모든 contributor 머신에 이미 있다고 보장할 수 있는 거, 모든 CI 이미지가 이미 지원하는 거, 모든 JavaScript 튜토리얼이 가정하는 거. 그 보편적 floor 가 npm 의 슈퍼파워고, 그게 디폴트로 남는 이유.
npm v11 (Node.js 24 와 함께 ship) 은 Node.js ^20.17.0 || >=22.9.0 필요. 매일 작업에 중요한 최근 개선: 더 나은 캐싱으로 install 더 빨라짐, --ignore-scripts 가 모든 lifecycle script 에 적용 (보안 강화), npm init 이 묵시 디폴트 대신 ESM vs CommonJS 묻기.
npm 한계 진짜야. flat node_modules 구조가 phantom dependencies 허용 — package.json 에 선언 안 됐지만 다른 게 필요해서 우연히 있어서 import 되는 코드. install 이 pnpm 이나 Bun 보다 느림 (Next.js install ~57초 vs ~9초). lockfile (package-lock.json) 이 verbose 하고 자주 merge-conflict. 그리고 npm 이 native 로 monorepo 워크플로우를 pnpm 이나 Yarn 만큼 잘 지원 안 함.
그 약점 중 어느 것도 npm 의 가장 큰 강점 압도 안 함: 이미 거기 있어. 취미 프로젝트, 오픈소스 라이브러리, 100% 확신 못 하는 팀에게 npm 이 안전한 디폴트. speedup 또는 monorepo 지원 원할 때 pnpm 이나 Bun 손에 잡아.