Don't be afraid of challenges

pnpm이란 본문

웹서비스

pnpm이란

초아롱 2024. 12. 27. 16:11

1. pnpm이란 ?

pnpm이란 패키지 관리 도구로, 빠르고 효율적인 의존성 설치를 제공한다. npm이나 yarn과 비슷한 기능을 제공하지만, 의존성을 하드링크하여 더 적은 디스크 공간을 사용하고 속도 또한 빠르다. 이는 특히 모노레포 프로젝트나 대규모 프로젝트에서 효율적이다.

더보기

모노레포 란 ?

버전 관리 시스템에서 두 개 이상의 프로젝트 코드가 동일한 저장소에 저장되는 소프트웨어 개발 전략

2. 주요 기능과 특징

  • 하드 링크 저장 : pnpm은 모든 패키지를 전역 저장소에 설치하고, 하드 링크를 통해 프로젝트에 연결한다. 이 덕분에 중복된 패키지 설치를 방지하고 디스크 공간을 절약할 수 있다.
  • 빠른 설치 속도 : pnpm은 의존성의 중복 다운로드를 방치하고, 네트워크 트래픽을 줄여 npm보다 빠르게 설치할 수 있다.
  • 모노레포 지원 : pnpm은 여러 패키지를 하나의 저장소에서 효율적으로 관리할 수 있다는 점에서 모노레포 프로젝트 구조에서 강력한 기능을 제공한다.
  • Lock 파일 사용 : pnpm-lock.yaml 파일을 통해 의존성 버전을 고정하여, 일관된 빌드 환경을 제공한다.
더보기

하드 링크란 ?

한 파일의 복사본을 만든다고 생각하면 된다. 소프트 링크와의 차이점은 원본을 지워도 하드 링크 파일은 실행이 되며, 내용이 보존된다는 것이다.

3. 설치 및 기본 설정

3.1. pnpm 설치

// pnpm 설치
npm install -g pnpm

// pnpm을 통한 프로젝트 초기화
pnpm init

 

3.2. 패키지 설치

// 패키지 설치
pnpm add <package_name>

// 개발 의존성으로 패키지 설치
pnpm add <package_name> -D

 

3.3 기존 프로젝트 pnpm으로 전환

기존 npm이나 yarn 프로젝트는 pnpm import 명령어를 사용하여 pnpm으로 전환할 수 있고, package-lock.json 또는 yarn.lock 파일을 pnpm-lock.yaml 로 변환할 수 있다.

pnpm import

 

 

4. 주요 사용 예제

4.1. 의존성 관리 예제

// 의존성 설치
pnpm add axios

// 패키지 제거
pnpm remove axios

 

4.2 스크립트 실행 예제

pnpm을 통해 package.json의 스크립트를 실행할 수 있다.

// package.json 파일
{
  "scripts": {
    "start": "node index.js",
    "build": "tsc"
  }
}

// 스크립트 실행
pnpm run start
pnpm run build

 

4.3 모노레포 프로젝트 설정

pnpm은 모노레포에서 workspace 기능을 제공한다. 예를들어, packages 폴더 내에 여러 패키지를 관리할 수 있다.

// pnpm-workspace.yaml
packages:
  - 'packages/*'
  // packages 디렉토리 안의 모든 패키지를 워크스페이스로 인식합니다.

 

5. 장단점

장점

  • 빠른 설치 속도 : 하드 링크 방식으로 패키지를 공유하여 설치 속도가 빠르다
  • 공간 절약 : 전역 패키지 저장소를 사용해 디스크 공간을 절약한다.
  • 모노레포 최적화 : 대규모 프로젝트의 모노레포 구조에 적합하다.
  • 엄격한 의존성 관리 : 종속 패키지의 설치 및 관리를 명확히 하여, 의존성 충돌 문제를 줄인다.

단점

  • 호환성 문제 : 일부 패키지가 pnpm의 엄격한 의존성 구조를 지원하지 않을 수 있다.
  • 학습 곡선 : 기존 npm, yarn과는 설치 방식이 달라 익숙해지기 까지 시간이 필요하다.
  • 기존 프로젝트 전환 시 설정 필요 : npm에서 pnpm으로 전환 시 lock 파일을 변환하거나 추가 설정 필요

6. npm, yarn과 비교

기능 pnpm npm yarn
속도 빠름 보통 빠름
의존성 설치 방식 하드 링크 복사 하드링크 (pnp 지원)
모노레포 지원 강력한 지원 제한적 지원 강력한 지원
디스크 공간 절약 전역 캐시 저장소 사용 모든 프로젝트에 복사 전역 캐시
명령어 호환성 npm과 유사하지만 추가 기능 있음 기본 npm과 유사하지만 추가 기능 있음

'웹서비스' 카테고리의 다른 글

Next.js + 스토리북 활용하기  (2) 2025.01.30
[Jest] 파일 구조 & 사용법  (2) 2024.12.26
React Testing Library  (0) 2024.12.26
prisma가 무엇인가  (3) 2024.12.26
브라우저의 렌더링 원리  (3) 2024.09.11