Yarn Berry에서 만난 Module not found

Tech
2023-11-09

상황

앰플리튜드 설치가 필요해 yarn add @amplitude/analytics-browser 명령어를 입력했습니다. 이후 아래와 같은 화면이 나타났습니다.

원인

Yarn Berry를 적용한 레포지토리에서 작업하고 있었습니다. Yarn Berry는 .yarn/cache 폴더에 의존성 정보를 저장하는데, Import trace for requested module 부분에 .yarn/cache가 여러 번 뜨는 걸 보고 의존성 문제임을 추측했습니다.

@amplitude/plugin-web-attribution-browserDependencies를 확인해 보니, @amplitude/analytics-core가 있었습니다.

해결 방법

의존성 정보가 건전하지 않은 패키지를 사용하기 위해서는 packageExtensions를 사용해 의존성 정보를 확장해야 합니다. 이때 Yarn 패키지 매니저의 설정을 변경하는 yarn config set 명령어를 사용하면 됩니다.

yarn config set 'packageExtensions["@amplitude/plugin-web-attribution-browser@0.7.0"].peerDependencies["@amplitude/analytics-core"]' '^0'

이 명령어는 @amplitude/plugin-web-attribution-browser 패키지가 버전 '0.x.x'의 @amplitude/analytics-core 패키지를 peer dependency로 가지도록 설정하겠다는 의미입니다.

명령어를 실행한 이후에는 .pnp.cjs.yarnrc.yml 파일이 수정되었습니다.

// .yarnrc.yml
 
packageExtensions:
  "@amplitude/plugin-web-attribution-browser@0.7.0":
    peerDependencies:
      "@amplitude/analytics-core": "^0"

이렇게 되면 @amplitude/plugin-web-attribution-browser 패키지가 @amplitude/analytics-core 패키지를 참조하는 상황에서 오류가 발생하지 않습니다.

예전에 읽은 아티클을 통해 Yarn Berry의 PnP 전략 덕분에 엄격한 의존성 관리가 가능함을 인지하고만 있었는데, 이 장점을 실제로 경험한 것이 신기해 글로 남겨봅니다.