인턴

[트러블슈팅] pnpm Workspace 기반 모노레포 의존성 미인식 & 로컬 패키지 변경사항 미반영

jjangsh 2025. 6. 26. 18:03

1️⃣ 의존성 미인식 문제

문제상황

  • 프로젝트 구조: apps/web, apps/mobile, packages/*로 구성된 pnpm workspace 기반 모노레포
  • lodash 패키지를 web에서는 잘 사용했으나, mobile에서오류 발생
Module not found: Can't resolve 'lodash'

원인분석

  • pnpm은 각 워크스페이스(예: apps/mobile)의 package.json에 명시된 의존성만 노출
  • 루트 혹은 다른 앱에만 설치되어 있으면 해당 workspace에서는 인식하지 못함

해결과정

  • apps/mobile/package.json의 dependencies에 lodash 추가
  • 아래 명령어로 workspace 단위 설치
pnpm add lodash --filter ./apps/mobile
  • mobile 프로젝트에서 정상적으로 import 및 빌드 확인

결과

  • 각 워크스페이스에서 필요한 의존성은 반드시 개별적으로 명시해야 함
  • 의존성 미설치로 인한 런타임 오류 해결

2️⃣ 패키지 변경사항 핫리로드 미반영 문제 (로컬 패키지 반영 문제)

문제상황

  • packages/utils 등 내부 공통 패키지의 유틸 함수 코드를 수정해도
  • apps/web 등 앱에서 바로 반영되지 않거나, 이전 코드가 계속 실행됨
  • pnpm install 또는 앱 dev 서버 재시작해도 변화 없음

원인분석

  • pnpm은 내부 패키지를 심볼릭 링크로 연결
  • 간혹 심볼릭 링크/캐시 문제, 빌드 순서 문제 등으로 인해 앱에서 최신 코드가 반영되지 않을 가능성 존재

해결과정

  • 루트에서 아래 명령어로 링크 및 lockfile 재설정
pnpm install --force
  • 전체 워크스페이스 빌드
pnpm -r build
  • 에디터(IDE) 완전 재시작
  • 필요시 node_modules와 .pnpm 삭제 후 재설치
rm -rf node_modules .pnpm && pnpm install

결과

  • 내부 패키지(공통 모듈) 변경사항이 앱에 즉시 반영
  • workspace 간 실시간 개발/Hot Reload 가능