상황
앰플리튜드 설치가 필요해 yarn add @amplitude/analytics-browser
명령어를 입력했습니다. 이후 아래와 같은 화면이 나타났습니다.
원인
Yarn Berry를 적용한 레포지토리에서 작업하고 있었습니다. Yarn Berry는 .yarn/cache
폴더에 의존성 정보를 저장하는데, Import trace for requested module
부분에 .yarn/cache
가 여러 번 뜨는 걸 보고 의존성 문제임을 추측했습니다.
@amplitude/plugin-web-attribution-browser
의 Dependencies를 확인해 보니, @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 전략 덕분에 엄격한 의존성 관리가 가능함을 인지하고만 있었는데, 이 장점을 실제로 경험한 것이 신기해 글로 남겨봅니다.