1. 발생 계기
react 내 슬라이드 기능을 넣고 싶어서 react-slick 을 설치하는 과정에서 발생했다. 즉 설치가 되지않는 오류.
당시 입력했던 명령어는 npm i react-slick
2. 탐구해본 원인
뜬금없이 에러가 발생하여서, 원인이 무엇인가 고민을 하게 되었다. 바로 검색하는 습관은 별로 좋지 않을테니, 해석을 좀 해보려고 했는데 dependency tree 를 해결할 수 없다 라는 오류인것 같다. 처음 들어본 단어이기도 하고, 이걸 해석해야 풀 수 있을것 같긴 했는데, 그 밑에를 좀 더 살펴보니 뭔가 설치된 react 의 버전 문제같은 느낌이 들었다. 즉, root project (나에게 설치된) react version 과 요구되는 버전의 차이가 뭔가 문제를 일으키는 것 같다..
3. 해결 과정
더 아래를 해석해보니 이러한 upstream dependency conflict 를 고치던가, 다시 시도를 하되, 뒤에 --force 나, --legacy-peer-deps 를 붙여서 설치해보라고 하는것 같다.
그래서 설치 문구를 아래처럼 하니
npm i react-slick --legacy-peer-deps
문제없이 설치가 되었다.
같은 문제가 발생한다면 저렇게 설치하면 될 것 같지만, 좀 더 검색을 통해 알아보려고 했다.
검색을 통해 알아보니, dependency(의존성) 에 대해 잘 설명해두신 블로그 글이 있어서 참고하였다.
https://www.korecmblog.com/ERESOLVE-unable-to-resolve-dependency-tree/
ERESOLVE unable to resolve dependency tree 해결하기
상황 블로그를 만들기 위해 Gatsby Starter 메뉴얼에 따라서 아래 명령어를 실행했다. 공식 문서에서 제공하는 설치 방법임에도 불구하고 아래와 같은 오류가 발생했다. 자세히 오류를 살펴보면 아
www.korecmblog.com
npm 의 의존성 관리는 다음과 같다고 한다.
- dependencies
- 프로젝트에서 실제로 의존하고 호출하는 의존성들
- devDependencies
- 개발할 때만 의존하는 의존성들(예를 들면 코드 포맷팅을 예쁘게 해주는 라이브러리)
- peerDependencies
- 내 패키지가 다른 패키지로부터 직접 불려지는(require) 것은 아니지만 특정 버전의 패키지와 호환된다는 것을 명시
- 즉, 내가 다른 패키지의 특정 버전과 호환된다는 것을 뜻한다
- optionalDependencies
- 선택적인 의존성으로 없거나 설치에 실패해도 npm 패키지 설치 과정이 중단되지 않아 다른 라이브러리 설치에 영향을 주지 않는 의존성들
- bundledDependencies
- 내 패키지와 함께 제공되는 일련의 패키지들. 타사 라이브러리가 NPM에 없거나 일부 프로젝트를 모듈에 포함하려는 경우 사용할 수 있다.
여기서 현재 내가 오류가 난 상황은 peerDependencies 인데, 즉 react-slick 에서 명시한 peerDependecies 의 react 버전과 현재 내 pakage.json 내 react 버전에서 차이가 발생한 것이다. 여기에 npm 7 버전 이상부터는 실제로 react 의 버전이 일치하지 않는다면 오류를 발생시킨다. 그래서 오류가 발생한 것이다.
이를 해결하는 방법에는 위 조언처럼 버전을 같게 하거나, 아니면
- npm i --force
- npm i --legacy-peer-deps
를 통해 설치를 하는것을 권장한다.
'Programing > Error' 카테고리의 다른 글
Error : MySQL Sequelize 사용 중 Models 관련 오류 (0) | 2022.11.23 |
---|---|
Error : Access denied for user '유저아이디'@'localhost' (using password: YES) 해결 및 mysql 비밀번호 초기화 (0) | 2022.11.16 |
Error : because it would overwrite input file (0) | 2022.11.12 |
Error: Invalid Hook Call Warning (1) | 2022.10.29 |
Error : store.getstate is not a function (0) | 2022.10.27 |