pnpm

  • pnpm은 기존의 방식을 해치지 않고, 빠르고 효율적인 방식을 사용

  • 모노레포를 지원, 엄격한 의존성 해석을 통해 의도하지 않게 사용되는 경우를 피함

  • 여러가지 장점으로 인해 모노레포를 운영할 수 있는 좋은 패키지매니저로 부상중

    • turborepo 공식문서에서도 권고함

pnpm

  • 빠르고 효율적인 패키지매니저

  • 모노레포를 지원,

  • 평탄하지 않은 node_modules 가 기본이기 때문에 엄격한 의존성 관리가 가능

  • 시스템 내 단일 패키지 스토어에 모든 의존성을 보관하기에 디스크 절약

  • 필요한 의존성을 식별하여 스토어로 가져오고, 디렉토리 구조를 계산하여 하드링크하는 과정을 가지기 때문에 설치속도 빠름

    • 프로젝트에 의존성이 설치될 때 다른 패키지에 사용되는 똑같은 의존성일 경우(===스토어에 존재하는) 하드링크 방식으로 가져옴 (즉, 추가로 설치하지 않음)

    • 스토어에 존재하지 않는 의존성들만 새로 설치함

  • 기본적으로 pnpm은 symlink를 이용하여 프로젝트의 직접적인 의존성만을 모듈 디렉토리의 루트로 추가함

    • 해당 프로젝트에서만 사용하는 의존성들은 루트 워크스페이스에 관리되지 않고 내부적으로 관리하기 때문에 팬텀 디펜던시를 방지하게됨

실습

ls -al packages/b/node_modules

pnpm이 의존성 용량을 아끼는 방법

  • node_modules/.pnpm/Virtual Store라고 부른다.

  • .pnpm 하위로 추가된 패키지들은 실제로 해당 위치에 설치된것이 아닌 다른 저장소에 hard link 방식으로 복사되어있는것

  • hard link가 된것은 각각 용량을 차지하는것이 아닌 중앙 스토어에만 용량을 차지하게 됨?? -> 아이노드 방식?

  • 여러군데에서 사용(설치) 하더라도 한 곳의 용량만 사용하기 때문에 디스크 용량을 많이 줄일수있는 기법

pnpm Virtual Store

pnpm config get store-dir  //스토어 위치 확인 방법
pnpm config set store-dir ~/.pnpm-store //스토어 위치 설정

Last updated