Don't be afraid of challenges
pnpm이란 본문
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 |