CRA에서 eject 되돌리기
Table of contents
그런건 없습니다.
CRA로 빌드한 프로젝트에서 yarn eject 명령어를 실행하기 전 되돌리 수 없다는 경고를 무시하지 말고 꼭 필요한 경우를 고려해서 하도록 하자 진짜 되돌리기는 불가능하다. 😂😂😂
eject해도 문제가 생기는건 아니지만 CRA를 사용하는 많은 장점을 잃게 되니 매우 주의가 필요하다!
(이에 대한 자세한 내용은 Create-React-App에서 Eject사용안하기 이 포스트를 읽어보자)
하지만 희망은 있는법 undo 'npm run eject' in react - Stack Overflow 이걸 참고로 eject하기 전과 같은 상태로 복구해보자
Solution #1
먼저 eject를 해서 추출된 configuration들이 있는 scripts/, config/ 디렉토리를 삭제하자
$ rm -r scripts/$ rm -r config/
그리고 node_modules/ 디렉토리와 하위 모두 삭제!
$ rm -r node_modules/
eject 명령이 실행되면서 삭제된 react-scripts 패키지 재설치
$ yarn add react-scripts
package.json안 "scripts"을 아래와 같이 수정
(package.json 안의 다른 설정들도 eject하기 이전과 같이 바꿔야한다)
..."scripts": {"start": "react-scripts start","build": "react-scripts build","test": "react-scripts test","eject": "react-scripts eject"},...
그리고 패키지 인스톨 명령어를 실행!
$ yarn install
Solution #2
master 브랜치에서 작업하지 않고 다른 브랜치를 따서 작업했다면 더 쉽다. 
package.json이 eject를 실행하기 이전 상태인 브랜치로 이동
첫 번째 방법과 마찬가지로 node_modules/ 디렉토리와 하위 모두 삭제!
$ rm -r node_modules/
패키지 인스톨 명령어를 실행하면 된다!
$ yarn install
해결..?
첫 번째 방법으로 시도 했지만 스크립트 명령어가 실행이 안돼서 실패
다시 두 번째 방법으로 시도 스크립트 명령어는 동작 하지만 $ yarn start를 실행하니
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined
다시 다른 에러가 발생 😂
react-scripts의 버전을 "react-scripts": "3.x.x" → "react-scripts": "3.4.0"으로 변경해서 해결!
내가 해결한 방법
- scripts/, config/ 삭제 sh$ rm -r scripts/$ rm -r config/
- node_modules/ 삭제 sh$ rm -r node_modules/
- yarn.lock 삭제 sh$ rm -r yarn.lock
- eject하기 이전 상태로 package.json을 되돌리고- "react-scripts": "3.4.0"으로 변경sh"dependencies": {"react-scripts": "3.4.0"}
- 패키지 인스톨 명령어 실행 sh$ yarn install
결국 따져보면 다 지우고 eject하기 이전 상태의 package.json으로 재설치한 것 뿐이다.
TL ; DR
- 커스터 마이징을 위해 eject가 필요하다면 처음부터 CRA를 사용하지 않는 것이 좋다.
- 되돌리려면 eject이전 상태의 package.json이 필요하다.
- eject하지 말자