엄격한 의존성 해결
증상
원인
pnpm은 Yarn이나 npm보다 의존성 해결이 엄격합니다. 누락된 peer dependency를 자동으로 설치하지 않고 명시적으로 설치하도록 요구합니다.해결 방법
1. Peer dependency 명시적 설치
2. auto-install-peers 설정 (권장하지 않음)
.npmrc:
3. pnpm.overrides 사용
package.json:
Workspace Protocol 오류
증상
원인
workspace:* 프로토콜을 사용했는데 해당 패키지가 workspace에 없습니다.
해결 방법
1. workspace 패키지 확인
pnpm-workspace.yaml:
2. 패키지 이름 확인
3. package.json 수정
Catalog 버전 불일치
증상
원인
pnpm-workspace.yaml의 catalog에 정의된 버전과 package.json의 버전이 다릅니다.
해결 방법
1. Catalog 버전 사용 (권장)
package.json:
2. Catalog 업데이트
pnpm-workspace.yaml:
3. 전체 workspace에서 catalog 버전으로 통일
호이스팅 문제
증상
원인
pnpm은 기본적으로 의존성을 호이스팅하지 않습니다. 각 패키지는node_modules/.pnpm에 격리되어 설치됩니다.
해결 방법
1. public-hoist-pattern 사용
.npmrc:
node_modules로 호이스팅합니다.
2. shamefully-hoist (최후의 수단)
.npmrc:
3. 올바른 의존성 선언
TypeScript Path Mapping 오류
증상
원인
pnpm의 엄격한 의존성 해결로 인해 TypeScript path mapping이 제대로 작동하지 않습니다.해결 방법
1. tsconfig.json 설정
2. tsx/ts-node 설정
tsconfig.json:
Phantom Dependencies
증상
코드에서 직접 import하는 패키지가package.json에 없는데도 작동합니다.
원인
다른 패키지의 의존성을 통해 우연히 접근 가능한 Phantom Dependencies입니다.해결 방법
1. 명시적 의존성 추가
2. pnpm check 실행
onlyBuiltDependencies 오류
증상
원인
onlyBuiltDependencies 목록의 패키지를 선택적으로만 설치하도록 설정되어 있습니다.
해결 방법
pnpm-workspace.yaml:
Overrides 적용 안 됨
증상
pnpm.overrides를 설정했는데 적용되지 않습니다.
원인
- overrides 문법이 잘못됨
- workspace root가 아닌 곳에 설정함
- pnpm 버전이 낮음
해결 방법
1. 올바른 overrides 문법
package.json (workspace root):
