nextjs react 의존성 설치 force legacy-peer-deps 차이
nextjs와 react의 의존성 충돌을 방지하기 위해 npm 옵션으로 `force`와 `legacy-peer-deps` 명령어를 사용할 수 있다.
의존성은 실행되는 메인 프로그램에 필요한 라이브러리와의 관계를 의미한다.
이런 관계는 버전에 따라 차이가 있고, nextjs와 react인 경우 예민한 느낌이 있다.
실행되는 프로그램과 라이브러리가 호환이 되지 않는다면 코드는 문제가 없을지라도 런타임 환경에서 수시로 에러를 표출할 수 있다.
이런 의존성을 해결하는 방법으로 `force` 또는 `legacy-peer-deps` 옵션을 사용할 수 있다.
그럼에도 잘 안되는 경우가 있지만, 이 때는 검색을 통해 버전을 맞춰주면 된다.
![]() |
NEXT React 의존성 설치 npm install {some-package} --legacy-peer-deps, --force 차이 |
nextjs react dependency
-force, -legacy-peer-deps difference
--force, --legacy-peer-deps
모든 프로그램이 그렇듯 외부 라이브러리를 사용할 때 의존성( dependency )는 매우 중요하다.
외부 라이브러리는
개발자에게 개발 편의성을 제공하고,
사용자에게 사용 편의성을 제공한다.
Node 기반의 모든 프로젝트들은 외부 라이브러리를 사용하기 위한 명령어인 `npm`을 제공한다.
npm 명령어를 사용할 때 버전의 차이로 외부 라이브러리들의 설치 오류가 발생할 수 있으며,
`--force` 또는 `--legacy-peer-deps` 옵션을 사용하여 설치가 가능하다.
공통점과 목적
React 개발을 겪으면서 프로젝트를 생성하고, 외부 라이브러리를 설치할 때 충돌이 발생하는 경우를 여럿 경험했다.
해결된 것도 있고, 그렇지 않은 경우들도 있었다.
어쨌든, 프로그램은 실행되어야 하며, 해결은 필요하다.
`npm install`명령어를 사용할 때 외부 라이브러리들의 설치 오류가 발생할 수 있다.
이런 경우 `--force` 또는 `--legacy-peer-deps`옵션을 사용하여 설치 오류를 방지할 수 있다.
이 옵션들의 공통점은 `충돌 방지와 설치`에 있다.
다만, 이미 발생한 버전의 차이 때문에,
런타임의 정상적인 실행은 실제로 확인해 봐야 한다.
( 옵션을 사용해 설치가 되었을 경우, 보통은 정상적인 구동이 되긴 하였다. 10%는 아니었지만. )
옵션의 차이
`--force`와 `--legacy-peer-deps`의 공통점은 프로그램에서 사용되는 라이브러리를 설치하는데 있다.
차이가 있다면, 라이브러리 사이의 `종속성에 대한 충돌 검사`에 있다.
node 관련한 프로젝트들은 사람을 힘들게 하는 뭔가가 있다.
어쨌든 이런 라이브러리들을 설치할 때 충돌이 발생하면 2가지 옵션을 사용하여
종속성에 상관없이 라이브러리를 설치할 수 있으며,
해당 옵션에 대한 내용은 간단한 다음과 같다.
- --leagacy-peer-deps
- 라이브러리간 의존성 검사를 무시하고 설치.
- --force
- 라이브러리간 충돌 무시, 에러 무시, 강제 설치.
버전이 문제다.
react 관련해서 내부적으로 어떤 문제가 있었는지 모르겠다.
다만, node 관련한 다른 라이브러리들의 충돌 문제는 사람을 힘들게 한다.
오히려, 순수한 html을 사용하는 것보다 못한 경우들이 보이기도 한다.
하물며, react를 사용하는 것은 콤포넌트와 훅의 사용 등 편의성이 있기 때문이다.
한가지 다행스러운 점이라면,
라이브러리간 의존성 충돌이 발생하여 설치 오류가 난다면,
콘솔창에 상세한 오류와 해결책을 보여준다는 점에 있다.
( 딱히, 도움은 안되지만, 그럭저럭 참고할 만하다. )
검색을 해보면 알겠지만,
그놈의 의존성 충돌 문제 때문에
npm 과 개별 라이브러리들의 버전을 맞추는 작업을 하기도 한다.
( 이게 무슨 삽질인지, 닷넷과 자바가 얼마나 잘 만들어진 언어인지 새쌈 존경스럽다.)
사용법과 사용 순서
강제로 설치할 것인가?, 어쨌든 설치를 진행할 것인가? 의 차이가 있겠지만,
--legacy-peer-deps 를 먼저 사용할 것을 권장한다.
사용법은 다음과 같다.
# 의존성 단순 설치
npm install some-package
# 의존성 호환 구버전 패키지 설치
npm install some-package --legacy-peer-deps
# 강제 설치
npm install some-package --force
옛날 버전의 어떤 패키지를 설치할 때 의존성 충돌에 의한 설치 오류가 발생한다면,
먼저 `--legacy-peer-deps` 옵션을 사용해 설치하고,
그럼에도 실패한다면 `--force`를 사용한다.
최악의 수단
node 기반의 react 프로젝트의 버전업이 아주 새롭게 변경된 시점에서
거의 모든 프로젝트의 유지보수는 react와 함께 의존성 버전업이 수행될 것이다.
만약, 라이브러리의 의존성이 높을 수록 개발자 입장이라면
그냥 업보라 생각하자.
마음을 가다듬고,
NPM (공식 홈페이지) 에서 각 패키지별로 버전을 찾아 맞출 수 밖에 없다.
댓글
댓글 쓰기