티스토리 뷰
pnpm이란?
pnpm(Performant Node Package Manager)는 주요 JavaScript 패키지 관리자 중 하나로, 2016년 Zoltan Kochan에 의해 Node.js JavaScript 런타임 환경을 위해 개발되었다.
왜 pnpm을 사용해야 하는가?
1. 디스크 공간 절약
npm을 사용할 때 종속성을 사용하는 프로젝트가 100개 있는 경우 해당 종속성의 사본 100개가 디스크에 저장된다. 그러나, pnpm을 사용하면 의존성이 content-addressable 저장소에 저장되므로, 다음 단계가 진행된다.
- 다른 버전의 의존성(dependencies)을 사용할 때, 다른 부분만이 저장소에 추가된다. 만약 100개의 파일이 있고, 새로운 버전이 해당 100개 파일 중에 한 파일의 변화만을 가진다면,
pnpm update
는 전체 의존성을 클론하는 대신에 오직 하나의 파일만 저장소에서 add한다. . - 모든 파일은 디스크 상에서 단일 위치에 저장된다. 패키지가 설치될 때 그 파일들은 단일 위치에서 링크되며 추가적인 디스크 공간을 소비하지 않는다. 이를 통해 프로젝트 간에 동일한 버전의 의존성을 공유할 수 있다.
결과적으로, 디스크 공간은 프로젝트와 의존성의 수에 비례하여 더 많이 절약된다.
2. 설치 속도 향상
pnpm은 세 단계로 설치를 수행한다.
- 의존성 해결(Resolving, Fetching) 저장소에 필요한 모든 의존성이 식별되고 패치(수정)된다
- 폴더 구조 계산.
node_modules
디렉터리 구조는 의존성을 기반으로 계산된다. - 의존성 연결(Fetching, Linking). 의존성 해결 과정에서 식별된 패키지들이 실제로 다운로드되고, 필요에 따라 수정(patching)되어
node_modules
디렉터리에 배치된다
이 접근은 다른 패키지 관리자의 전통적인 3-단계 설치 과정(의존성 해결resolving, 수정fetching, node_modeules에 작성(Linking))보다 현저하게 빠르다
3. 까다로운 node_modules 디렉토리 생성
npm 또는 Yarn 클래식을 통해 의존성을 설치할 때, 모든 패키지는 모듈 디렉토리의 루트로 이동(hoist)된다. 결과적으로, 소스 코드는 프로젝트에 의존성으로 추가되지 않은 의존성에 접근할 수도 있다.
그러나, 기본적으로 pnpm은 symlink (심볼릭 링크) 를 사용하여 프로젝트의 직접적인 의존성만을 모듈 디렉토리의 루트로 추가한다.따라서 직접적으로 의존하지 않는 패키지들은 별도의 디렉터리에 위치하게 된다.
다음 폴더 구조를 참고하자. 소스 코드가 직접적으로 의존하는 express만이 최상위 node_modules 디렉터리에 위치해 있고, cookie는 express 내부에서만 접근할 수 있다. 이는 의존성 충돌을 방지하고 패키지 간의 명확한 의존성 관계를 유지하는 데에 도움이 된다.
설치하기
다양한 방법이 존재한다. npm 사용자는 npm을 이용해 간단하게 설치할 수 있다.
npm install -g pnpm@latest-10
*latest-10 : pnpm 패키지의 특정 버전 태그를 의미한다. 이 태그는 pnpm의 10.x.x 메이저 버전 중 가장 최신 버전
설치 이전 호환성 확인
해당 Node.js 버전을 지원하는 과거 pnpm 버전 목록
Node.js | pnpm 8 | pnpm 9 | pnpm 10 |
---|---|---|---|
Node.js 14 | ❌ | ❌ | ❌ |
Node.js 16 | ✔️ | ❌ | ❌ |
Node.js 18 | ✔️ | ✔️ | ✔️ |
Node.js 20 | ✔️ | ✔️ | ✔️ |
Node.js 22 | ✔️ | ✔️ | ✔️ |
설치 이후 에러 해결(Trouble Shooting)
pnpm을 설치했음에도 찾을 수 없는 오류가 발생하거나, 전역 pnpm을 찾을 수 없을 경우 PATH를 지정하거나 해당 디렉토리에서 삭제 이후 재설치 하는 것이 도움이 된다.
//오류 예시
Error: Cannot find module 'C:\Users\Bence\AppData\Roaming\npm\pnpm-global\4\node_modules\pnpm\bin\pnpm.js'
위치 확인
$ which pnpm
/c/Program Files/nodejs/pnpm
환경 변수 편집
시스템 환경 변수 편집 -> 환경 변수 -> PATH 편집 (pnpm위치 지정)
CLI 명령어
pnpm add <pkg>
: 패키지와 그것이 의존하는 모든 패키지를 설치
pnpm install
or pnpm i
: 프로젝트의 모든 종속성을 설치하는 데 사용
pnpm prune
: 불필요한 패키지를 제거
동기 | pnpm
Saving disk space
pnpm.io
'Development Tools • Systems' 카테고리의 다른 글
[Supabase] Supabase 시작하기 (1) | 2025.03.09 |
---|