๐Ÿ‘ฉโ€๐Ÿ’ป
Megaptera Frontend
  • ์ฃผ์ฐจ๋ณ„ ํ•™์Šต
    • megaptera-front
    • 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
      • 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
      • 2. TypeScript
      • 3. React
      • 4. Testing Library
      • 5. Parcel & ESLint
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 2. JSX
      • 1. JSX
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 3. React๋กœ ์‚ฌ๊ณ ํ•˜๊ธฐ
      • 1. React Component
      • 2. React State
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 4. React Hooks
      • 1. Express
      • 2. Fetch API & CORS
      • 3. React์˜ Hook
      • 4. useRef & Custom Hook
      • 5. usehooks-ts
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 5. ํ…Œ์ŠคํŠธ
      • 1. TDD
      • 2. React Testing Library
      • 3. MSW
      • 4. Playwright
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 6. External Store
      • 1. External Store
      • 2. TSyringe
      • 3. Redux ๋”ฐ๋ผํ•˜๊ธฐ
      • 4. usestore-ts
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 7. React Router
      • 1. Routing
      • 2. Routes
      • 3. Router
      • 4. Navigation
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 8. CSS in JS
      • 1. Design System
      • 2. Style Basics
      • 3. CSS in JS
      • 4. styled-components
      • 5. props์™€ attrs
      • 6. Global Style & Theme
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 9. ์‡ผํ•‘๋ชฐ ๋ชฉ๋ก, ์ƒํ’ˆ ํŽ˜์ด์ง€
      • 1. ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „ ์ค€๋น„
      • 2. ๋ชฉ๋ก ๋ณด๊ธฐ
      • 3. ์ƒํ’ˆ ์ƒ์„ธ ๋ณด๊ธฐ
      • 4. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ณด๊ธฐ
      • 5. ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ ๋‹ด๊ธฐ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 10. ์‚ฌ์šฉ์ž ์ธ์ฆ, ์ธ๊ฐ€
      • 1. ๋กœ๊ทธ์ธ
      • 2. ๋กœ๊ทธ์•„์›ƒ
      • 3. ํšŒ์›๊ฐ€์ž…
      • 4. ์ฃผ๋ฌธ ๋ชฉ๋ก & ์ฃผ๋ฌธ ์ƒ์„ธ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 11. ์ฃผ๋ฌธ, ๊ฒฐ์ œ
      • 1. ๋ฐฐ์†ก ์ •๋ณด ์ž…๋ ฅ
      • 2. ํฌํŠธ์› ๊ฒฐ์ œ ์š”์ฒญ
      • 3. ๋ฐฐ์†ก ๋ฐ ๊ฒฐ์ œ ์ •๋ณด ์ „๋‹ฌ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 12. ์–ด๋“œ๋ฏผ
      • 1. ๊ด€๋ฆฌ์ž ์›น ์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ ์‹œ์ž‘
      • 2. ๋กœ๊ทธ์ธ, ์‚ฌ์šฉ์ž ๋ชฉ๋ก
      • 3. ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ
      • 4. ์ฃผ๋ฌธ ๊ด€๋ฆฌ
      • 5. ์ƒํ’ˆ ๊ด€๋ฆฌ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
Powered by GitBook
On this page
  • 1. Bundler
  • ๋ฒˆ๋“ค๋Ÿฌ
  • ๋นŒ๋“œ
  • Parcel
  • SWC
  • ํ•ด๋‘๋ฉด ์ข‹์€ ์„ธํŒ…
  • ๋นŒ๋“œ + ์ •์  ์„œ๋ฒ„ ์‹คํ–‰
  • 2. Lint
  • ๋ฆฐํŠธ
  • ESLint
  • ์žฅ์ 
  • ๊ธฐ๋ณธ ์„ธํŒ…
  • ์‹คํ–‰
  1. ์ฃผ์ฐจ๋ณ„ ํ•™์Šต
  2. 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

5. Parcel & ESLint

Previous4. Testing LibraryNextํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ

Last updated 2 years ago

1. Bundler

๋ฒˆ๋“ค๋Ÿฌ

๐Ÿ“ฆ ๋ฒˆ๋“ค๋Ÿฌ

์˜์กด์„ฑ์ด ์žˆ๋Š” ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜(๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ)์˜ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋„๊ตฌ ์ง€๊ธˆ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜๋Š” ES Modules์˜ ํ‘œ์ค€์ธ import, export ๋“ฑ์ด ์˜ˆ์ „์—๋Š” ๋ฏธ์ง€์› ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š” โ‡’ ๋ฒˆ๋“ค๋ง

๋นŒ๋“œ

๋นŒ๋“œ(build)๋Š” ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์„ ์ปดํ“จํ„ฐ๋‚˜ ํœด๋Œ€ํฐ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ€๊ณต๋ฌผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ • ๋˜๋Š” ๊ทธ ๊ฒฐ๊ณผ๋ฌผ ์ฝ”๋“œ ํŒŒ์ผ์ด ์‹คํ–‰ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๋Š” ์ปดํŒŒ์ผ ๊ณผ์ •์ด ํ•ต์‹ฌ

Parcel

The zero configuration build tool Zero Configuration : ํŠน๋ณ„ํ•œ ์„ค์ • ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ ๋„๊ตฌ

Parcel์ด ์ง€์›ํ•˜๋Š” ๊ฒƒ

  • ์ตœ์‹  ๋ฒ„์ „์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•ด, ์ƒ์œ„ ๋ฒ„์ „์˜ JS๋ฅผ ์˜›๋‚  ๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š”

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜

๋‚ด๋ถ€์ ์œผ๋กœ SWC๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ์กด ๋„๊ตฌ๋ณด๋‹ค ๋น ๋ฆ„

cf. โšก๏ธ ES Module, ๋ฅผ ์ ๊ทน ํ™œ์šฉํ•˜๋Š” ๋„ ๋งค์šฐ ๋น ๋ฆ„

SWC

ํ•ด๋‘๋ฉด ์ข‹์€ ์„ธํŒ…

1. package.json ํŒŒ์ผ์— source ์†์„ฑ ์ถ”๊ฐ€

"source": "./index.html",

์›๋ž˜ npx parcel index.html --port 8080๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์›ํ•˜๋Š” ํฌํŠธ๋กœ ์„œ๋ฒ„๋ฅผ ์—ด ์ˆ˜ ์žˆ์Œ ๋งค๋ฒˆ ์น˜๊ธฐ ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์— "source": "./index.html", ์„ค์ •์„ ์ถ”๊ฐ€ โ‡’ npx parcel --port 8080๋งŒ ์ž…๋ ฅํ•ด๋„ ๋จ

static ํด๋”์˜ ํŒŒ์ผ์„ ์ •์  ํŒŒ์ผ๋กœ Serving ๊ฐ€๋Šฅ(์ด๋ฏธ์ง€ ๋“ฑ Assets)

// ์„ค์น˜
npm i -D parcel-reporter-static-files-copy

.parcelrc ํŒŒ์ผ

{
  "extends": ["@parcel/config-default"],
  "reporters":  ["...", "parcel-reporter-static-files-copy"]
}
  • ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํด๋” ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ static ์œผ๋กœ ์„ค์ •

  • static ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์คŒ

๋นŒ๋“œ + ์ •์  ์„œ๋ฒ„ ์‹คํ–‰

// package.json ํŒŒ์ผ์˜ scripts
// "build": "parcel build", โ‡’ npm run build

npx parcel build
  • ./dist ํด๋”๊ฐ€ ์ƒ์„ฑ๋จ

  • ./dist๋ฅผ ์‹คํ–‰

npx servor ./dist
  • ๋‹ค์‹œ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ์œผ๋ฉด ํด๋” ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋ฉด ๋จ

2. Lint

๋ฆฐํŠธ

cf. ๋™์  ๋ถ„์„ : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ

๐Ÿงถ lint [๋ช…์‚ฌ]

  1. ๋ฆฐํŠธ(๋ถ•๋Œ€์šฉ์œผ๋กœ ์“ฐ๋Š” ๋ถ€๋“œ๋Ÿฌ์šด ๋ฉด์ง๋ฌผ์˜ ์ผ์ข…)

  2. (์ง๋ฌผ ์ง์กฐ ๋•Œ ๋น„์–ด์ ธ ๋‚˜์˜จ) ๋ณดํ‘ธ๋ผ๊ธฐ์‹ค

  3. ๋ณดํ’€

ESLint

TSlint๊ฐ€ ๋”ฐ๋กœ ์žˆ์—ˆ์ง€๋งŒ ESLint์— ํก์ˆ˜๋จ

์žฅ์ 

  • ์ž ์žฌ์  ๋ฌธ์ œ ๋ฐœ๊ฒฌ

  • ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ์ถ”์ฒœ โ†’ ์ตœ์‹  ํŠธ๋ Œ๋“œ๋ฅผ ํ•™์Šตํ•˜๋Š”๋ฐ ํ™œ์šฉ ๊ฐ€๋Šฅ

    • Ex. const { value } = data;

๊ธฐ๋ณธ ์„ธํŒ…

.vscode ํด๋” ์ƒ์„ฑ ํ›„ settings.json ํŒŒ์ผ ์ถ”๊ฐ€

{
    "editor.rulers": [
        80
    ],
    "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true
    },
    "trailing-spaces.trimOnSave": true
}
  • "source.fixAll.eslint": true : JS/TS ํŒŒ์ผ์„ ์ €์žฅํ•  ๋•Œ๋งˆ๋‹ค ESLint๋ฅผ ์‹คํ–‰ํ•˜๊ณ  fixํ•˜๋„๋ก ์„ค์ •

  • "trailing-spaces.trimOnSave": true : ๋ถˆํ•„์š”ํ•œ ๊ณต๋ฐฑ์„ ์‚ญ์ œ

์‹คํ–‰

npm run lint && npm run check ๋ฆฐํŠธ fix & ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ์ฒดํฌ

package.json ํŒŒ์ผ์˜ scripts (๊ด€๋ จ ๋ถ€๋ถ„)

"scripts": {
    "check": "tsc --noEmit",
    "lint": "eslint --fix --ext .js,.jsx,.ts,.tsx .",
  },

Rust๋กœ ๋งŒ๋“  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ

2. ํŒจํ‚ค์ง€ ์„ค์น˜ ํ›„ .parcelrc ํŒŒ์ผ ์ž‘์„ฑ

: config๊ฐ€ ์—†๋Š” ์„œ๋ฒ„

์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜, ๋ฒ„๊ทธ, ์Šคํƒ€์ผ ์˜ค๋ฅ˜ ๋“ฑ์— ํ‘œ์‹œ๋ฅผ ๋‹ฌ์•„๋†“๊ธฐ ์œ„ํ•œ ๋„๊ตฌ โ†’ ์‹คํ–‰ ์—†์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„์„, ์‹œ๊ฐ„์ด ์งง์Œ

์Šคํƒ€์ผ ํ†ต์ผ โ†’ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜() ์œ ์ง€ ๊ฐ€๋Šฅ

Parcel ๊ณต์‹๋ฌธ์„œ
ํ•œ๊ตญ์–ด ๋ฒ„์ „
babel
esbuild
Vite
SWC ๊ณต์‹๋ฌธ์„œ
parcel-reporter-static-files-copy
servor
์ •์  ๋ถ„์„ ๋„๊ตฌ
ESLint ๊ณต์‹๋ฌธ์„œ
Coding_conventions