Development/React

패키지 매니저 비교 - npm, yarn, pnpm

카이노스 2024. 12. 14. 00:06

1. npm (Node Package Manager)

특징

  • Node.js와 함께 기본 제공되는 패키지 매니저.
  • 가장 널리 사용되며 생태계가 매우 크다.
  • Lock 파일: package-lock.json을 통해 설치된 패키지의 정확한 버전을 잠금.
  • 워크스페이스: npm v7부터 모노레포를 지원하는 워크스페이스 기능 추가.

장점

  • Node.js 설치 시 기본 제공.
  • 생태계가 크고 문서와 리소스가 풍부.
  • 보안 검사 도구 내장(npm audit).
  • 단순하고 익숙한 명령어.

단점

  • 느린 속도 (v5 이후 개선).
  • 이전에는 종속성 설치 시 디스크 사용량이 비효율적.

 

2. Yarn

특징

  • Facebook이 개발한 패키지 매니저.
  • npm의 문제점을 보완한 대안으로 등장.
  • Lock 파일: yarn.lock으로 재현 가능한 빌드 제공.
  • PnP(Plug and Play): 노드 모듈 디렉터리를 제거하고 패키지를 효율적으로 관리.

장점

  • 빠른 속도 (병렬 설치 및 캐싱 기능).
  • 기본적으로 종속성을 더 효율적으로 처리.
  • 설치 시 예측 가능성이 높음.
  • yarn workspace로 모노레포 지원.

단점

  • npm 대비 학습 곡선이 조금 더 높을 수 있음.
  • 일부 환경에서 호환성 문제.

 

3. pnpm (Performant npm)

특징

  • 효율성 중심의 패키지 매니저.
  • 패키지를 공유 저장소에 저장해 디스크 공간 절약.
  • 파일 시스템의 하드 링크를 사용하여 설치 속도 개선.
  • Lock 파일: pnpm-lock.yaml을 통해 재현 가능한 빌드 보장.

장점

  • 디스크 공간 절약.
  • 빠른 설치 속도.
  • 모노레포 지원(pnpm workspace).
  • Node.js 패키지 호환성 보장.

단점

  • 덜 알려져 있으며, 일부 팀원들에게 학습 곡선이 있을 수 있음.
  • 일부 도구나 환경에서 초기 설정 필요.

 

비교 표

속도 느림 빠름 매우 빠름
디스크 사용량 높음 높음 낮음 (공유 저장소)
모노레포 지원 지원 (v7+) 지원 지원
Lock 파일 이름 package-lock.json yarn.lock pnpm-lock.yaml
Plug and Play 없음 지원 지원
캐싱 및 병렬 설치 제한적 우수 매우 우수