npm 5.2.0 이상부터 함께 설치된 CLI
개발용 서버를 띄움. 소스코드가 수정되면 다시 컴파일 하고 웹페이지를 새로고침
Project 폴더 바로 아래 build 라는 폴더가 만들어지고, 그 안에 Production 배포를 위한 파일들이 생성됨
npm install serve -g
serve -s build
__tests__
폴더 안의 .js
파일
.test.js
로 끝나는 파일
.spec.js
로 끝나는 파일
react-scripts
사라짐
드러내지 않고 cra 에 의해 사용되던 각종 패키지가 package.json
에 나타남
Jest, Babel, ESLint
설정 추가
각종 설정 파일이 config
폴더에 생성됨
eject 를 이용하면, cra 로 만든 프로젝트에서 cra 를 제거한다.
돌이킬 수 없기 때문에 신중하게 결정해야 한다.
cra 내에서 해결이 안되는 설정을 추가해야 할 때 사용한다.
npm init -y
npm i eslint -D
npx eslint --init
Ok to proceed? (y) y
✔ How would you like to use ESLint? · problems
✔ What type of modules does your project use? · none
✔ Which framework does your project use? · none
✔ Does your project use TypeScript? · No / Yes
✔ Where does your code run? · browser
✔ What format do you want your config file to be in? · JavaScript
// eslint
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": "latest"
},
"rules": {
"semi": [
"error",
"always"
]
}
}
// React
// package.json
{
"name": "tic-tac-toe",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
> "rules": {
"semi" : "error"
}
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
npm init -y
npm i prettier -D
npx prettier index.js (찾아줌)
npx prettier index.js —write (찾고 수정)
.prettierrc.json 파일 생성 후, 설정
prettier 패키지 설치
eslint-config-prettier
prettier 에서 불필요하거나, prettier 와 충돌할 수 있는 모든 규칙을 끔
이 구성은 규칙을 끄기만 하면 되기 때문에 다른 설정과 함께 사용하기 좋음
{
...
"eslintConfig" : {
"extends" : [
"react-app",
"prettier"
]
}
...
}
(git hooks made easy)
npm init -y
git init
npm i husky -D
npx husky install
{
"name": "husky-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"prepare": "husky install",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"husky": "^8.0.1"
}
}
npx husky add .husky/pre-commit “npx-test”
{
"name": "tic-tac-toe",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
"scripts": {
"prepare": "husky install",
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
"rules": {
"semi": "error"
}
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"husky": "^8.0.1",
"lint-staged": "^13.0.3"
}
}
npx husky add .husky/pre-commit “lint-staged”
npm i lint-staged -D
npm i prettier -D
{
"name": "tic-tac-toe",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
"scripts": {
"prepare": "husky install",
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
"lint-staged" : {
"**/*.js":[
"eslint --fix",
"prettier --write",
"git add"
]
},
"rules": {
"semi": "error"
}
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"husky": "^8.0.1",
"lint-staged": "^13.0.3"
}
}
React Developer Tools (브라우저에 설치)