dev💻/인프라 및 기타

[NPM] 협업에 꼭 필요한 Conflicting peer dependency 해결하기 (--legacy-peer-deps, --force, node 버전 맞추기)

귤랑귤랑 2023. 12. 5. 16:08

작업을 열심히 하고 merge했는데 ci 에서 아래와 같은 오류가 발생했다.

npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR! 
npm ERR! While resolving: @tanstack/react-query@5.8.7
npm ERR! Found: react@17.0.2
npm ERR! node_modules/react
npm ERR!   react@"^17.0.2" from the root project
npm ERR!   peer react@"^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" from @react-aria/ssr@3.9.0
npm ERR!   node_modules/@react-aria/ssr
npm ERR!     @react-aria/ssr@"^3.6.0" from @react-aria/utils@3.17.0
npm ERR!     node_modules/@react-aria/utils
npm ERR!       @react-aria/utils@"3.17.0" from react-modal-sheet@2.2.0
npm ERR!       node_modules/react-modal-sheet
npm ERR!         react-modal-sheet@"^2.2.0" from the root project
npm ERR!   19 more (@react-aria/utils, @react-stately/utils, ...)
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^18.0.0" from @tanstack/react-query@5.8.7
npm ERR! node_modules/@tanstack/react-query
npm ERR!   @tanstack/react-query@"^5.8.7" from the root project
npm ERR! 
npm ERR! Conflicting peer dependency: react@18.2.0
npm ERR! node_modules/react
npm ERR!   peer react@"^18.0.0" from @tanstack/react-query@5.8.7
npm ERR!   node_modules/@tanstack/react-query
npm ERR!     @tanstack/react-query@"^5.8.7" from the root project
npm ERR! 
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.

내 컴퓨터에서도 발생했던 오류다! --legacy-peer-deps로 해결했었다.

--legacy-peer-deps

--force

이 플래그 들을 사용하면 해결은 되지만 둘 다 충돌을 우회하는 것이고 잠정적인 위험을 안고 가는 것이기 때문에 나중에 큰 장애가 날 수도 있다.

일단 해당 오류가 발생하는 이유는 dependency tree가 충돌하였기 때문이다.

dependency tree가 충돌한 이유는 서버 환경이나 협업자가 다른 node 버전을 쓰고 있기 때문이다. 이로 인해 npm install하며 package-lock.json에 설치되는 dependency tree가 다르기 때문에 발생하는 오류로 보인다.

근본적인 해결책은 협업하는 작업자들의 node 버전을 맞추는 것이다.

1. node 버전을 통일

2. 기존 package-lock.json 삭제

3. 변경한 node로 install 하여 새로운 package-lock.json 생성

해결!