Node.js

[Node.js] npm install --force 와 --lagacy-peer-deps 차이

itaeiou 2022. 1. 4. 18:04
반응형

npm install --force 와 npm install --lagacy-peer-deps 차이

 

npm install 에러

github actions 로 자동배포를 설정해뒀는데, 배포가 되지않아 확인해봤더니

npm install 에서 unable to resolve dependency tree 에러가 발생했다.

 

메세지를 천천히 읽어보면, 의존성 트리에 충돌이 났다는 내용으로

@toast-ui/react-editor@2.5.4 에서는 react 16.0.0 버전을

root project에서는 react 17.0.1 버전을 사용해 버전을 맞춰주라는 내용이다.

 

쭉쭉 내려서 23번째줄부터 보면 --force--legacy-peer-deps 옵션을 사용하라고 친절하게 알려준다.

어떤 의미의 옵션인지 살펴보자.

 

에러 원인

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 7에 도입된 흥미로운 새 기능입니다. npm(4-6)의 이전 버전에서 피어 종속성 충돌은 버전이 호환되지 않지만 오류 없이 종속성을 설치한다는 경고를 표시했습니다. npm 7은 자동으로 해결할 수 없는 업스트림 종속성 충돌이 있는 경우 설치를 차단합니다.

에러 원인이라고 하긴 좀 그렇지만 npm 버전 7에서 새로운 기능이 등장하면서부터 발생한다.

npm 7으로 업데이트되면서 peer dependencies 자동 설치가 등장했다.

이전 4~6 버전에서는 경고만 표시했지만 7 버전은 충돌이 있는 경우 에러로 판단해 설치를 중단한다.

 

그래서 peer dependencies 충돌이 생겼을 때 어떻게 할 것이냐를 두가지 옵션으로 정할 수 있다.

--force 나 --legacy-peer-deps 옵션이 여기에 사용된다.

 

차이점

You have the option to retry with --force to bypass the conflict or --legacy-peer-deps command to ignore peer dependencies entirely (this behavior is similar to versions 4-6). 

번역: --force를 사용하여 충돌을 우회하거나 --legacy-peer-deps 명령을 사용하여 피어 종속성을 완전히 무시할 수 있는 옵션이 있습니다(이 동작은 버전 4-6과 유사함)

--force 는 충돌하는 peerDependencies가 루트 프로젝트에 설치하고

--legacy-peer-deps 는 peerDependencies가 자동으로 설치 되는 기능을 무시한다.

블로그 글을 보면 대부분 --legacy-peer-deps를 사용하는 것 같은데, --force가 더 낫다는 의견이 많다고 한다.

 

참고

https://velog.io/@yonyas/Fix-the-upstream-dependency-conflict-installing-NPM-packages-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0%EA%B8%B0

https://velog.io/@gth1123/npm-cli-flag-force-and-legacy-peer-deps

 

반응형