작업 공간
pnpm은 기본적으로 ('multi-package repositories', 'multi-project repositories', 'monolithic repositories'로도 알려진) 모노레포를 지원합니다. 하나의 레포지토리에 다수의 프로젝트가 존재하는 워크스페이스를 생성할 수 있습니다.
워크스페이스는 최상위 디렉토리에 pnpm-workspace.yaml
파일을 가지고 있어야 합니다. 또한 .npmrc
파일을 가질 수 있습니다.
모노레포를 관리하는 법을 찾고 있다면 Bit을 참고하세요. 내부적으로 pnpm을 사용하는 Bit은 기존에 pnpm/npm/Yarn으로 관리되는 workspace에서 수동으로 이루어지는 많은 일을 자동으로 처리합니다. Bit을 소개하는 bit install
과 관련된 글(Bit으로 어렵지 않게 모노레포 의존성 관리하기)을 살펴보세요.
Workspace 프로토콜 (workspace:)
기본적으로 pnpm은 이용 가능한 패키지 버전이 선언된 범위와 일치하는 경우에 workspace의 패키지를 참조합니다. 예를 들어, bar
가 "foo": "^1.0.0"
를 의존성으로 가지고 workspace에 foo@1.0.0
가 존재하면 bar
는 foo@1.0.0
을 참조합니다 그러나 bar
가 "foo": "2.0.0"
를 의존성으로 포함하면서 workspace에 foo@2.0.0
가 없다면 레지스트리에서 foo@2.0.0
가 설치될 것입니다. 이 동작은 다소 불확실합니다.
다행히도 pnpm은 workspace:
프로토콜을 지원합니다. 이 프로토콜을 사용한다면, pnpm은 로컬 workspace 바깥의 패키지에서는 작업을 수행하지 않습니다. 만약 "foo": "workspace:2.0.0"
로 설정되어 있다면 workspace에 "foo@2.0.0"
가 없기 때문에 설치에 실패할 것입니다.
이 프로토콜은 link-workspace-packages 옵션이 false
로 설정된 경우에 특히 유용합니다. 이 경우, workspace:
프로토콜을 사용한다면 pnpm은 workspace에 있는 패키지만을 가져올 것입니다.