Node.js npm install --force와 --legacy

임철종·2022년 7월 12일
1
post-thumbnail

에러와의 만남

당시 에러를 캡처해두지 않아 동일한 내용의 에러 사진을 가져왔다... 출처😢

회사에서 선임 개발자님과 프로젝트를 진행하던 어느 날 선임분의 작업을 git pullnpm i를 실행했다가 에러를 만났다.
에러 발생의 원인과 해결법을 정리하고자 한다.


에러 메세지의 내용

가장 위쪽 내용을 읽어보면, dependency tree를 해결할 수 없다고 나와있다.
그 아래로 이어진 내용을 읽어보면, katex@0.11.1을 현재 node_modules에서 사용하고 있는데,gatsby-remark-katex@3.10.0katex^0.10.0peer(동료)이므로 저것에 맞추어 사용하라는 내용이다.

그 아래 친절하게 해결 방법도 같이 나와있다.
상위 의존 충돌을 고치려면 방금 명령어를 --force 혹은 --legacy-peer-deps와 함께 사용하십시오.

실제로 npm i --force 를 실행하니 잘 다운로드되었다!


npm 7 버전

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? --legacy-peer-deps?

그렇다면 해결하기 위해 사용하라는 이 두 옵션에는 무슨 차이가 있을까?

  • --force는 충돌하는 peer dependency들을 루트 프로젝트에 설치하여 에러를 해결한다.
  • --legacy-peer-deps는 peer dependency가 맞지 않는 것을 무시하고 설치를 진행한다. (4-6 버전의 npm과 비슷하다.)

--legacy-peer-deps를 사용할 경우 peer dependency가 맞지 않음에도 설치를 진행하므로 예기치 못한 에러가 발생할 수 있으니 --force로 해결되지 않을 때 사용하는 것이 좋다.


참고

yonas.log
jane_aeiou Repository

profile
🌑🌘🌗🌖🌕

0개의 댓글