본문으로 건너뛰기
버전: Next

pnpm vs npm

npm의 flat tree

npm은 version 3 부터 flattened dependency tree를 통해 dependency를 관리합니다. 이러한 방식은 디스크의 크기를 덜 사용하게 되지만, 복잡한 node_modules 디렉토리의 구조를 야기합니다.

반면 pnpm은 node_modules를 global on-disk content-addressable store에 hard linking과 symbolic linking방식으로 연결하여 관리합니다. 이러한 연결 방식은 더 적은 디스크공간만을 사용하면서, node_modules를 깔끔하게 관리해 줍니다. 더 자세한 내용은 store layout에 정리되어 있습니다.

pnpm의 node_modules구조는 프로젝트의 package.json에 명시되지 않은 모듈을 사용할 수 없게 함으로써 의도되지 않은 버그를 피하는 것을 도와줍니다. helps to avoid silly bugs

설치하기

pnpm은 package.json에 저장하지 않고 패키지를 설치하는 것을 허용하지 않습니다. pnpm add 커맨드에 따로 파라미터가 주어지지 않는다면, 패키지는 dependencies로 저장됩니다. npm과 같이, --save-dev 또는 --save-optional 파라미터는 dev 혹은 optional dependencies로 패키지를 저장하기 위해 사용됩니다.

이러한 제약의 결과로 dependency를 삭제하여 분리된 상태로 남겨두지 않는 한, 프로젝트에는 관련 없는 패키지는 존재하지 않을 것 입니다. 이러한 이유로 prune 커맨드가 패키지를 명시하지 못하도록 구현되었습니다. - prune 커맨드는 항상 관련없는 패키지 모두를 삭제합니다.

디렉토리 dependencies

디렉토리 dependencies는 file: 접두사로 시작하고, 파일 시스템 내의 디렉토리를 가리킵니다. npm처럼, pnpm도 이러한 의존성을 symlinks합니다. npm과는 달리 pnpm은 파일 dependencies를 설치하지 않습니다.

만약 foo (<root>/foo)라는 패키지가 bar@file:../bar라는 dependency를 갖고 있고, foo에서 pnpm install커맨드를 실행한다면, pnpm은 <root>/bar에 대한 설치를 실행하지 않을 것입니다.

모노레포와 같은 환경처럼 여러 패키지에서 동시에 설치를 해야하는 경우 pnpm -r문서를 참고하십시오.