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
문서를 참고하십시오.