Performent Node Package Manager
한마디로 표현하면 "빠르고 효율적인 javscript 패키지 매니저"라고 할 수 있다
1. npm
npm은 node와 'pkgmakeinst'라는 bash 유틸리티의 합성어로, 기존에 프로젝트 의존성을 수동으로 다운로드 해야 했던 불편함을 혁신적으로 개선한 패키지 매니저의 시초이다.
node.js 내부에 내장되어 있어 추가적인 설치 작업이 필요하지 않다는 것이 장점!
가장 오래 된 패키지인 만큼 자료가 많다.
2. yarn
yarn은 2017년 페이스북 및 구글 개발자들이 함께 내놓은 패키지 매니저로
대부분의 개념과 프로세스가 npm을 기반으로 하고 있지만, npm의 큰 취약점이던 보안 문제를 해결한 것이 장점이다.
여러 개의 패키지를 순차적으로가 아닌 병렬적으로 설치해 주어 속도나 안정성도 개선되었다
현재는 yarn berry라는 버전이 사용 되는 중
3. pnpm
pnpm은 개발자 Zoltan Kochan이 2017년 내놓은 패키지 매니저로, 'performant npm(효율적인 npm)'의 약자이다.
pnpm의 장점은 이름처럼 '효율성'인데, 프로젝트의 node_modules 내부에 매번 패키지를 설치했던 기존 매니저들과 달리 pnpm은 글로벌 저장소에 패키지를 물리적으로 한 번만 저장하여 디스크 공간을 절약하고, 향상된 성능을 보인다는 장점이 있다.
효율적인 디스크 사용
npm/yarn 과 비교했을때, pnpm은 node_modules 폴더의 패키지는 중복으로 저장되지 않아 효율적인 디스크사용이 가능하고 성능에도 크게 도움을 준다.
예) sample_1, sample_2, sample_n라는 프로젝트가 있고, 각 프로젝트가 pkg_1을 포함하고 있을 때
pkg_1의 크기가 2MB라고 가정하면, npm이나 yarn 의 경우는 아래와 같이 각 프로젝트별로 node_modules 폴더 안에 pkg_1을 포함하기에 총 6MB의 디스크를 차지한다.
반면, pnpm의 경우엔 별도의 저장소가 있고,(.pnpm_store)
각 프로젝트에서는 pkg_1에 대한 바로가기를 만든다. (엄밀히 표현하면 심볼릭링크, symbolic link)
따라서 4MB(2MB*2)의 크기만큼 중복된 저장공간을 효율화 할 수 있다.
프로젝트가 많을수록 효과는 커진다!