pnpm에서 여러 패키지를 하나의 리포지토리(monorepo)에서 함께 관리할 수 있게 해주는 기능.
모노레포(monorepo): 방식은 여러 개의 관련된 프로젝트를 하나의 저장소에서 버전 관리하고 개발하는 방식
모노레포의 반대는 폴리레포(polyrepo) 또는 멀티레포(multirepo)라고 함.
모노레포 방식으로 MSA같이 여러 프로젝트를 하나의 저장소에서 관리할 때 유용하게 사용할 수 있다.
## 폴더 구조 예시
my-monorepo/
├── apps/
│ ├── web/
│ └── admin/
├── packages/
│ ├── ui/ # 공통 UI 컴포넌트
│ └── utils/ # 유틸리티 함수 모음
├── package.json # 루트 패키지 설정
├── pnpm-workspace.yaml # 워크스페이스 설정
└── pnpm-lock.yaml
빠른 설치 - 중복 의존성 제거 + 하드 링크로 빠르고 효율적인 설치
의존성 공유 - 루트에서 공통 의존성을 관리할 수 있음
(공통 의존성 패키지를 각 프로젝트마다 모두 설치하지 않고, 루트에 있는 파일을 공유)
내부 패키지 동기화 - workspace 패키지는 symlink로 자동 연결됨
모듈화 - 프로젝트를 도메인이나 기능 단위로 명확히 분리 가능
npm install -g pnpm
packages:
- 'apps/*'
- 'packages/*'
pnpm install
pnpm add @myorg/ui --filter ./apps/web # 내부 패키지
pnpm add react --filter ./apps/web # 외부 패키지
{
"dependencies": {
"@myorg/ui": "workspace:*" // 내부 패키지
"react": "*" // 외부 패키지
}
}
# 전체 패키지 실행(순차 실행)
pnpm -r run dev
# 전체 패키지 실행(병렬 실행)
pnpm -r --parallel run dev
# 특정 패키지만 실행
pnpm --filter ./apps/web dev
# 의존성 그래프 보기
pnpm m ls --depth -1
작업 공간 | pnpm
https://pnpm.io/ko/workspaces