5. Parcel & ESLint

1. Bundler

๋ฒˆ๋“ค๋Ÿฌ

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

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

๋นŒ๋“œ

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

Parcel

Parcel ๊ณต์‹๋ฌธ์„œ ํ•œ๊ตญ์–ด ๋ฒ„์ „

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

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

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

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

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

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

SWC

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

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

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

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

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

2. parcel-reporter-static-files-copy ํŒจํ‚ค์ง€ ์„ค์น˜ ํ›„ .parcelrc ํŒŒ์ผ ์ž‘์„ฑ

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
  • ๋‹ค์‹œ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ์œผ๋ฉด ํด๋” ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋ฉด ๋จ

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

2. Lint

๋ฆฐํŠธ

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

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

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

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

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

  3. ๋ณดํ’€

ESLint

ESLint ๊ณต์‹๋ฌธ์„œ

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

์žฅ์ 

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

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

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

    • 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 .",
  },

Last updated