๋ฆฌ์กํธ๋ก ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์ ์ ์ฉํ ์ปดํฌ๋ํธ ๊ด๋ฆฌ ๋๊ตฌ, ์คํ ๋ฆฌ๋ถ์ ๋์ ํด๋ณด๊ธฐ - 3
(CRA + TypeScript + Prettier + ESLint + husky + lint-staged + Storybook + chromatic)
TypeScript๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Create React App ์ค๋น๋ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์ฆ์์ ๋ค๋ค๊ณ , ESLiint์ Prettier๋ ๋ ๋ฒ์งธ ์๋ฆฌ์ฆ์์ ๋ค๋ฃจ์๋ค.
husky
- Git ์ hook ์ด๋ผ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค. commit, push ๊ฐ์ Git๊ณผ ๊ด๋ จ๋ ์ด๋ค ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ ๋ ์ ํ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ค.
- husky ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Git Hook์ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ๋ค.
์ฐ์ husky๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์๋ณด์.
yarn add -D husky
lint-staged
- husky์ ๊ฐ์ด ์ฌ์ฉ๋๋ค. Git์ Staged๋ ํ์ผ๋ค์ ๋ํด ํน์ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์๊ฒ ํด์ค๋ค.
- Staged files๋, ํ์ผ์ด ์์ ๋๊ณ , Git add ๋ช
๋ น์ด๋ก ์คํ๋ ํ์ผ์ ๋งํ๋ค. ๋ง์ผ staged๋ ํ์ผ์ ํ ๋ฒ ๋ ์์ ํ ๊ฒฝ์ฐ, 'staged' ์ํ๋ก ์ฌ๋ฆฌ๊ธฐ ์ํด์๋ ๋ค์ ํ ๋ฒ
git add
๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ผ ํ๋ค.
yarn add -D lint-staged
husky, lint-staged ์ ์ฉํ๊ธฐ
- package.json์์ ์๋์ฒ๋ผ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์ ํด์ค ๊ฒ์ด๋ค.
{
"scripts": {
...
"prepare": "husky install"
},
"devDependencies": {
...
"eslint": "^8.8.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.28.0",
"husky": ">=6",
"lint-staged": ">=10",
"prettier": "^2.5.1",
...
},
"lint-staged": {
"src/**/*.{ts,tsx}": [
"eslint --ext .tsx --ext .ts ./src --fix"
],
"./src/**": [
"prettier --write ."
]
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}
}
์ด์ ์์ ํ ํ์ผ์ stage์ ์ฌ๋ฆด ๋๋ง๋ค hook์ ๊ฑธ๋ ค์, ESLint๊ฐ ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๋ง์ผ ์ ๋๋ก ์ฝ๋๊ฐ ํต๊ณผ๋์ง ๋ชปํ๋ฉด commit์ ํ ์ ์๊ฒ ๋์ด ์๋ค.
์ํ๋ค๋ฉด ์ด๋ฅผ Github Action์ ํตํด์๋ workflow๋ฅผ ๋ง๋ค ์๋ ์๋ค.