개발(Development)/React(리액트)

[React] create-react-app 리액트 버전 변경 및 에러 처리 방법

카레유 2022. 6. 23. 10:00

npx create-react-app 으로 리액트 프로젝트를 세팅하면,

항상 최신 버전의  react, react-dom 으로 설치가 된다.

 

그러나 다른 라이브러리와 호환이 안되는 등의 이슈로 인해,

react의 버전을 변경해야 할 때가 있다.

 

혹은,

GitHub 레퍼지터리 등에서 clone/pull 해온 프로젝트에서

npm install || yarn install 을 실행하면 버전이 서로 안 맞는다는 식의 에러코드가 쏟아질 때가 있다.

 

npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR! Found: react@18.0.0
npm ERR! node_modules/react
npm ERR!   react@"^18.0.0" from the root project

npm ERR! Could not resolve dependency:
npm ERR! Conflicting peer dependency: react@18.2.0
npm ERR! Conflicting peer dependency: 

npm ERR!   peer react@"^16.8 || ^17.0 || ^18.0"
npm ERR! node_modules/react
npm ERR!   peer react@"^18.0.0" from @testing-library/react@13.3.0
npm ERR!   node_modules/@testing-library/react
npm ERR!     @testing-library/react@"^13.2.0" from the root project

could not resolve dependency: npm peer react@"^18.0.0" from @testing-library/react@13.2.0

 

새로 프로젝트를 세팅하든,

레퍼지터리에서 불러와서 세팅하든,

 

방법은 아래의 3단계로 진행 한다.


1. 일단 create-react-app으로 React 프로젝트 세팅

- 혹은 GitHub, GitLab에서 기존 프로젝트를 clone/pull 해온다.

 

npx create-react-app 폴더명

 

- npx create-react-app 은 최신버전의 react, react-dom 으로 세팅되므로, 아래에서 변경할 예정이다.

- git clone 해온 경우, package.json 에서 모듈간에 버전이 서로 안 맞을 수 있으므로, 아래에서 맞춰줄 예정이다.

 

 

2. 라이브러리 모듈 삭제 (없으면 패스)

- package-lock.json 파일 삭제

- node_modules 폴더 삭제

 

 

3. package.json 파일 수정

- react, react-dom 의 버전을 변경해준다.

- 중요!!!! React 18 미만의 버전은 test 라이브러리 버전도 낮춰주야 한다.

 => 예를 들어 React 17 버전의 경우, testing-library 13 버전은 호환되지 않으므로 12 버전으로 변경해주면 된다.

{
// ...
"dependencies": {
	// ...
    "@testing-library/react": "^12.0.0",
    "@testing-library/user-event": "^12.0.0",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    // ...
  }
  // ...
 }

 

 => react, react-dom 버전만 변경하고, testing-library를 안 맞춰주면 아래의 에러가 노출되면서 설치가 안 될 수 있다.

could not resolve dependency: npm peer react@"^18.0.0" from @testing-library/react@13.2.0


Last Step: 마지막으로 모듈을 설치해준다.

npm install

 

이제 에러 없이 모듈들이 설치되고,

 

원하는 버전의 React, React-Dom 이 세팅된 프로젝트를 구동할 수 있을 것이다.

(혹은 그렇게 되길 바란다.)


혹시 React 18  버전에서 그 이하 버전으로 낮춘 경우,

ReactDOM.render 함수의 사용방식이 달라서 소스코드를 수정해 줘야 한다.(아래 글 참고)

 

[React] 리액트v18 버전 다운 에러 해결 방법 : Cannot find module 'react-dom/client'