pnpm vs npm
npm의 flat tree#
npm은 버전 3부터 평탄화된 종속성 트리를 유지합니다. 이로 인해 디스크 공간 낭비는 줄어들지만, 부작용으로 node_modules 디렉터리가 지저분해집니다.
반면 pnpm은 디스크상의 전역 콘텐츠 주소 지정 스토어에 대한 하드 링크와 심볼릭 링크를 사용하여 node_modules를 관리합니다. 덕분에 디스크 공간을 훨씬 적게 사용하면서도 node_modules를 깔끔하게 유지할 수 있습니다. 더 알고 싶다면 스토어 구조에 대한 문서를 참조하세요.
올바른 pnpm node_modules 구조의 장점은 프로젝트의 package.json에 명시되지 않은 모듈을 사용할 수 없게 하여 "어리석은 버그를 방지하는 데 도움이 된다"는 점입니다.
설치하기#
pnpm은 package.json에 저장하지 않고 패키지를 설치하는 것을 허용하지 않습니다. pnpm add에 매개변수를 전달하지 않으면 패키지는 일반 종속성으로 저장됩니다. 기존의 npm과 마찬가지로, --save-dev 및 --save-optional을 사용하여 패키지를 개발 종속성 또는 선택적 종속성으로 설치할 수 있습니다.
이러한 제약의 결과로 dependency를 삭제하여 분리된 상태로 남겨두지 않는 한, 프로젝트에는 관련 없는 패키지는 존재하지 않을 것 입니다. 그래서 pnpm의 prune 명령 구현에서는 정리할 패키지를 지정할 수 없으며, 불필요한 패키지와 고아 패키지를 항상 모두 제거합니다.
디렉토리 dependencies#
디렉터리 종속성은 file: 접두사로 시작하며 파일 시스템의 디렉터리를 가리킵니다. npm처럼, pnpm도 이러한 의존성을 symlinks합니다. npm과는 달리 pnpm은 파일 dependencies를 설치하지 않습니다.
즉, bar@file:../bar를 종속성으로 가진 foo라는 패키지 (<root>/foo)가 있을 때, foo에서 pnpm install을 실행해도 pnpm은 <root>/bar에 대한 설치를 수행하지 않습니다.
모노레포처럼 여러 패키지에서 동시에 설치를 실행해야 하는 경우, pnpm -r에 대한 문서를 참조하세요.