🎯 λΆμŠ€ν† μ–΄ ν”„λ‘œμ νŠΈμ˜ κΈ°λ°˜μ„ CRA둜 μ„€μ •ν•˜κ³ , 초기 폴더 ꡬ쑰λ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€.


πŸ“— Today I Learned

Book Store ν”„λ‘œμ νŠΈ

λŒ€μ€‘μ μœΌλ‘œ 널리 μ‚¬μš©λ˜λŠ” CRA둜 ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€. 이후 Vite둜 μ „ν™˜ν•˜λŠ” 과정은 μ–΄λ ΅μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, μš°μ„  CRA ν™˜κ²½μ—μ„œ React와 TypeScriptλ₯Ό ν•™μŠ΅ν•©λ‹ˆλ‹€.

npx create-react-app . --template typescript




폴더 ꡬ쑰

πŸ“ REACT-BOOK-STORE/
β”œβ”€β”€ πŸ“ node_modules/
β”œβ”€β”€ πŸ“ public/
β”œβ”€β”€ πŸ“ src/
β”‚   β”œβ”€β”€ πŸ“ api/
β”‚   β”œβ”€β”€ πŸ“ components/
β”‚   β”œβ”€β”€ πŸ“ hooks/
β”‚   β”œβ”€β”€ πŸ“ models/
β”‚   β”œβ”€β”€ πŸ“ pages/
β”‚   β”œβ”€β”€ πŸ“ utils/
β”‚   β”œβ”€β”€ App.test.tsx
β”‚   β”œβ”€β”€ App.tsx
β”‚   β”œβ”€β”€ index.tsx
β”‚   β”œβ”€β”€ react-app-env.d.ts
β”‚   └── setupTests.ts
β”œβ”€β”€ .gitignore
β”œβ”€β”€ package-lock.json
β”œβ”€β”€ package.json
β”œβ”€β”€ README.md
└── tsconfig.json
  • pages : λΌμš°νŠΈμ— λŒ€μ‘ν•˜λŠ” νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ(μ»¨ν…Œμ΄λ„ˆ)

  • components : 곡톡 μ»΄ν¬λ„ŒνŠΈ, 각 νŽ˜μ΄μ§€μ—μ„œ μ‚¬μš©λ˜λŠ” μ»΄ν¬λ„ŒνŠΈ

  • utils : 곡톡 μœ ν‹Έ ν•¨μˆ˜

  • hooks: μ»€μŠ€ν…€ ν›… μ •μ˜ 폴더

  • model : νƒ€μž… μ •μ˜λ‚˜ μΈν„°νŽ˜μ΄μŠ€

  • api : api 연동을 μœ„ν•œ fetcher λ“±




package.json

scripts ν•­λͺ©μ€ ν”„λ‘œμ νŠΈ 싀행을 μœ„ν•œ λͺ…λ Ήμ–΄ 단좕킀(슀크립트)λ₯Ό μ •μ˜ν•˜λŠ” λΆ€λΆ„μž…λ‹ˆλ‹€.

{
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "typecheck": "tsc --noEmit --skipLibCheck"
  },
}
  • start : 개발용 둜컬 μ„œλ²„λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
npm start

  • build : μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포용으둜 μ΅œμ ν™”λœ 정적 파일둜 λΉŒλ“œ
npm run build

  • test : 기본적으둜 Jestλ₯Ό μ‚¬μš©ν•΄ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰
npm test

  • eject : CRA(Create React App)λŠ” μˆ¨κ²¨μ§„ 섀정을 λͺ¨λ‘ λ°–μœΌλ‘œ κΊΌλ‚΄μ„œ 직접 μˆ˜μ •ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.
    ⚠️ 되돌릴 수 μ—†κΈ° λ•Œλ¬Έμ— μ‹ μ€‘νžˆ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
npm run eject

  • typecheck : TypeScript의 νƒ€μž… κ²€μ‚¬λ§Œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

    • tsc : TypeScript 컴파일러둜 ts νŒŒμΌμ„ js 파일둜 λ³€ν™˜μ‹œν‚΅λ‹ˆλ‹€.

    • --noEmit : μ‹€μ œ JavaScript νŒŒμΌμ€ μƒμ„±ν•˜μ§€ μ•Šκ³ , μ˜€λ‘œμ§€ νƒ€μž… 였λ₯˜λ§Œ ν™•μΈν•©λ‹ˆλ‹€.

    • --skipLibCheck : node_modules에 μžˆλŠ” μ™ΈλΆ€ 라이브러리의 νƒ€μž… κ²€μ‚¬λŠ” μƒλž΅ν•©λ‹ˆλ‹€.

npm run typecheck

πŸ€” μ™œ μ–΄λ–€ 건npm만 μ“°κ³ , μ–΄λ–€ 건 npm run을 μ“°λŠ”κ±ΈκΉŒ?

npm run은 scripts ν•­λͺ©μ— μ •μ˜λœ μ‚¬μš©μž 슀크립트λ₯Ό μ‹€ν–‰ν•  λ•Œ μ•žμ— λΆ™μ—¬ μ‚¬μš©ν•˜λŠ” κΈ°λ³Έ λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

start, test, stop, restartλŠ” npmμ—μ„œ μ˜ˆμ•…λœ ν‚€μ›Œλ“œλΌ run이 없이도 μž‘λ™ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.




✏️ 회고

슀크립트 λͺ…λ Ήμ–΄λ₯Ό 직접 λ§Œλ“€μ–΄μ„œ λ„£μ–΄ μ‚¬μš©ν•΄λ³΄λ©΄μ„œ npmκ³Ό CRA ꡬ쑰가 μ΅μˆ™ν•΄μ§€κ³  μžˆλŠ” 것 κ°™λ‹€.

profile
🌱개발 기둝μž₯

0개의 λŒ“κΈ€