01.Create React App
Create React App
은 줄여서 CRA
라고 부릅니다.
- 페이스북에서 제공하는 오픈소스로써 리액트 프로젝트 생성 뿐만 아니라 개발에 필요한 여러가지 기능들을 제공 해줍니다.
- CRA 바로가기
02.React App 생성
$ npx create-react-app tic-tac-toc
- 터미널에 해당 명령어를 입력하여
tic-tac-toc
이라는 이름의 react-app
을 생성합니다.
npx
: npm 5.2.0
이상부터 함께 설치된 커맨드라인 명령어
npx
는 라이브러리를 현재 최신 버전의 라이브러리를 확인하고 실행해주는 명령어입니다.
03.Package.json 파일 구조 이해하기
"dependencies": {
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.2.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.1.0",
"react-dom": "^18.1.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
- 골뱅이 기호로 시작하는 모듈 (
@testing-library/jest-dom
, @testing library/react
, "@testing-library/user-event
)들은 모두 Testing
작업을 도와주는 모듈입니다.
react
와 react-dom
은 react
를 사용하는데 반드시 필요한 핵심 모듈입니다.
react-scripts
는 create-react-app
의 개발모드 실행 및 배포할 파일을 생성 해주는 모듈입니다.
react-scripts
의 버전은 create-react-app
의 버전과 같습니다.
web-vitals
은 구글에서 사이트 경험을 측정하고 개선 해주는 모듈입니다.
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
scripts
에는 create-react-app
에서 사용할 수 있는 명령어가 있습니다.
- 해당 명령어들은 모두
react-scripts
의 (start
, build
, test
, eject
) 작업들을 실행 시켜주는 명령어 입니다.
04.개발 모드 실행
$ npm start
- 해당 명령어는 개발 모드로 로컬에서 열 수 있도록 하는
CLI
명령어 입니다.
- 개발 모드에서는 소스코드 수정시 웹 브라우저에 실시간 반영됩니다.
05.배포 버전으로 빌드하기
$ npm run build
- 개발자가 작업한 소스코드를 컴파일을 진행하게 하는 명령어입니다.
- 터미널에 해당 명렁어를 입력하면 빌드가 진행되고 배포 버전으로 파일들이 만들어집니다.
Project
폴더 바로 아래 build
라는 폴더가 만들어지고, 그 안에 Production
배포를 위한 파일들이 생성되게 됩니다.
$ npm install serve -g
$ serve -s build
- 위의 명령어는
serve
라는 패키지를 전역으로 설치합니다.
serve
라는 명령어를 -s
옵션으로 build
폴더를 지정하여 실행합니다.
-s
옵션은 어떤 라우팅으로 요청해도 index.html
을 응답하도록 합니다.
06.테스트
$ npm test
create-react-app
에서는 Jest
를 기반으로 test code
들을 작성할 수 있습니다.
npm test
를 통해 Jest
로 test code
가 실행이 되게 됩니다.
07.npm run eject
$ npm run eject
- 해당 명령어는
create-react-app
에서 코드를 작성하다가 더이상 이를 통해 관리받지 않겠다고 하는 명령어입니다.
- 이는 프로젝트 환경 설정을 커스터마이즈하기 위해
create-react-app
에서 제공하지 않는 범위의 변경 사항을 eject
하여 처리하려는 목적으로 사용하게 됩니다.
- 현업에서 대부분의 경우
CRA
의 범위에서 해결하려고 하기 때문에 자주 사용되지는 않는 명령어라 할 수 있습니다.