당시 에러를 캡처해두지 않아 동일한 내용의 에러 사진을 가져왔다... 출처😢
회사에서 선임 개발자님과 프로젝트를 진행하던 어느 날 선임분의 작업을 git pull
후 npm i
를 실행했다가 에러를 만났다.
에러 발생의 원인과 해결법을 정리하고자 한다.
가장 위쪽 내용을 읽어보면, dependency tree를 해결할 수 없다고 나와있다.
그 아래로 이어진 내용을 읽어보면, katex@0.11.1
을 현재 node_modules
에서 사용하고 있는데,gatsby-remark-katex@3.10.0
은 katex^0.10.0
과 peer(동료)이므로 저것에 맞추어 사용하라는 내용이다.
그 아래 친절하게 해결 방법도 같이 나와있다.
상위 의존 충돌을 고치려면 방금 명령어를 --force
혹은 --legacy-peer-deps
와 함께 사용하십시오.
실제로 npm i --force
를 실행하니 잘 다운로드되었다!
npm 버전이 7이상으로 넘어가면서 생긴 변화 중 이런 내용이 있다.
Automatically installing peer dependencies is an exciting new feature introduced in npm 7. In previous versions of npm (4-6), peer dependencies conflicts presented a warning that versions were not compatible, but would still install dependencies without an error. npm 7 will block installations if an upstream dependency conflict is present that cannot be automatically resolved.
npm github blog
peer dependency(동료 종속성)를 자동으로 설치하는 것이 npm 7의 흥미로운 새 기능입니다.
이전 버전에서는 동료 종속성 충돌로 인해 버전이 호환되지 않는다는 경고를 표시했습니다만, 오류 없이 종속성을 설치하였습니다. npm 7은 자동으로 해결할 수 없는 상위 종속성 충돌이 있는 경우 설치를 차단합니다.
요약: 4-6 버전까지는 peer dependency가 있더라도 경고만 뜨고 설치가 되었지만, 7버전 이후로는 설치를 차단한다.
그렇다면 해결하기 위해 사용하라는 이 두 옵션에는 무슨 차이가 있을까?
--force
는 충돌하는 peer dependency들을 루트 프로젝트에 설치하여 에러를 해결한다.--legacy-peer-deps
는 peer dependency가 맞지 않는 것을 무시하고 설치를 진행한다. (4-6 버전의 npm과 비슷하다.)--legacy-peer-deps
를 사용할 경우 peer dependency가 맞지 않음에도 설치를 진행하므로 예기치 못한 에러가 발생할 수 있으니 --force
로 해결되지 않을 때 사용하는 것이 좋다.