Skip to main content
pnpm workspace 환경에서 발생하는 의존성 관련 문제와 해결 방법을 다룹니다.

엄격한 의존성 해결

증상

원인

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:
경고: npm/yarn과 동일하게 작동하지만 pnpm의 장점을 포기하게 됩니다.

3. 올바른 의존성 선언

필요한 패키지를 직접 선언하는 것이 가장 안전합니다.

TypeScript Path Mapping 오류

증상

원인

pnpm의 엄격한 의존성 해결로 인해 TypeScript path mapping이 제대로 작동하지 않습니다.

해결 방법

1. tsconfig.json 설정

2. tsx/ts-node 설정

tsconfig.json:
설치:

Phantom Dependencies

증상

코드에서 직접 import하는 패키지가 package.json에 없는데도 작동합니다.
로컬에서는 작동하지만 CI나 다른 환경에서 실패합니다.

원인

다른 패키지의 의존성을 통해 우연히 접근 가능한 Phantom Dependencies입니다.

해결 방법

1. 명시적 의존성 추가

2. pnpm check 실행

onlyBuiltDependencies 오류

증상

원인

onlyBuiltDependencies 목록의 패키지를 선택적으로만 설치하도록 설정되어 있습니다.

해결 방법

pnpm-workspace.yaml:
이 패키지들은 바이너리를 포함하므로 플랫폼별로 설치가 필요합니다. 설치 실패 시:

Overrides 적용 안 됨

증상

pnpm.overrides를 설정했는데 적용되지 않습니다.

원인

  1. overrides 문법이 잘못됨
  2. workspace root가 아닌 곳에 설정함
  3. pnpm 버전이 낮음

해결 방법

1. 올바른 overrides 문법

package.json (workspace root):

2. pnpm-workspace.yaml에서 사용

3. 적용 확인

순환 workspace 의존성

증상

원인

Workspace 패키지들이 서로를 참조하여 순환 의존성이 발생했습니다.

해결 방법

1. 의존성 구조 재설계

해결:

2. peerDependencies 사용

캐시 문제

증상

의존성을 업데이트했는데도 이전 버전이 사용됩니다.

해결 방법

1. pnpm store 정리

2. 전체 재설치

관련 문서