npm 또는 yarn 의 불편함 및 속도를 개선한 package manager
예를 들어 100개의 react project 가 100개 있는 경우
각 project 별로 npm install 을 통해 100개의 node_modules 폴더가 만들어져 용량을 많이 잡아 먹게 된다.
pnpm 을 사용하면 특정 project 주소별 저장소에 저장해서 프로젝트 별로 연결만 시켜주어 같은 라이브러리를 중복해서 설치하지 않도록 한다.
- 특정 프로젝트만 다른 버전의 라이브러리를 사용하는 경우 저장소에 있는 라이브러리가 update 되지 않고 다른 버전의 라이브러리만 새롭게 추가됨
다른 프로젝트가 버전 호환 문제가 생기지 않도록 해준다.
- 모든 파일은 디스크의 한 위치에 저장됨
패키지가 설치되면 해당 파일이 프로젝트 위치와 연결된다.
추가 저장 공간을 사용하지 않는다.
이를 통해 프로젝트 간에 동일한 버전의 라이브러리를 공유할 수 있다.
- pnpm은 symlink를 사용하여 모듈 디렉토리의 루트에 프로젝트의 직접적인 종속성만 추가한다.
예를 들어 moment
를 설치하지 않았는데 다른 라이브러리에서 moment
를 사용할 경우 내 프로젝트에서도 사용할 수 있었다.
하지만 pnpm 에서는 이를 방지했다.
결과적으로 저장공간을 많이 절약하고 훨씬 더 빠르게 설치할 수 있다
설치는 터미널에서 brew install pnpm
로 하면 됨
CI
Continuous Integration | pnpm
github action 기준으로 pnpm 설치하고 사용하면된다.
크게 어려운 건 없다.
Git 주의사항
- pnpm-lock.yaml 변경사항 있을 때마다 commit 해야 한다.
- 패키지 확인을 건너뛸 수 있으므로 CI 및 프로덕션 환경에 더 빠르게 설치가능
- 개발, 테스트 및 프로덕션 환경 간에 일관된 설치 및 해결을 적용합니다. 즉, 테스트 및 프로덕션에 사용되는 패키지가 프로젝트를 개발할 때와 정확히 동일합니다.
- merge conflict
- pnpm은 자동으로 병합 충돌을 해결할 수 있습니다
pnpm-lock.yaml
. 충돌이 있는 경우 pnpm install
변경 사항을 실행하고 커밋
참고
https://pnpm.io/ko/
https://pnpm.io/ko/motivation