자바스크립트의 패키지 관리자 npm과 pnpm
npm이란?
npm은 자바스크립트의 패키지 관리자입니다. node.js 진영에서 많이 씁니다. 파이썬의 poetry, 자바의 maven과 비슷한 역할을 하는 친구입니다.
npm을 node package maneger의 약자로 오해할 수 있는데, 여기서 n은 node를 의미하는 것이 맞지만, pm은 다른 용어의 약어입니다. 바로 pkgmakeinst라는 bash 유틸리티의 약어입니다.
npm으로 패키지를 설치하면 프로젝트 루트에 package.json, package-lock.json 파일과 node_modules 폴더가 생성됩니다. package.json에는 설치된 dependency들에 대한 허용 가능한 버전들의 범위 목록, 예를 들어 "recharts": "^2.9.3"이 정리되어 있고, package-lock.json에는 실질적으로 설치된 정확한 버전 정보가 담겨 있습니다. 그리고 node_modules에는 실제로 설치된 패키지들이 들어가 있습니다.
pnpm이란?
pnpm도 역시 자바스크립트의 패키지 관리자입니다. npm이라는 패키지 관리자가 있으면 됐지 왜 pnpm이란 것이 생겼을까요?
pnpm은 performant npm의 약자입니다. 효율적인(performant) 노드 패키지 관리자라고 말할 수 있겠습니다.
기존의 npm의 가장 큰 단점은 dependency들의 중복 저장입니다. 프로젝트별로 node_modules 폴더에 매번 패키지를 별도로 설치했던 것과는 달리 pnpm은 전역(global) 저장소에 패키지를 물리적으로 한번만 저장하여 디스크 공간을 많이 절약할 수 있습니다.
참고자료
[1] https://yceffort.kr/2022/05/npm-vs-yarn-vs-pnpm
[2] https://github.com/npm/cli#is-npm-an-acronym-for-node-package-manager
[3] https://velog.io/@songyouhyun/Package.json%EA%B3%BC-Package-lock.json%EC%9D%98-%EC%B0%A8%EC%9D%B4
[4] https://velog.io/@sebinn/%ED%8C%A8%ED%82%A4%EC%A7%80-%EB%A7%A4%EB%8B%88%EC%A0%80-%EB%B9%84%EA%B5%90-npm-yarn-pnpm