Skip to content

Latest commit

ย 

History

History
48 lines (32 loc) ยท 3.16 KB

babel-with-typescript.md

File metadata and controls

48 lines (32 loc) ยท 3.16 KB
title layout permalink oneline
Using Babel with TypeScript
docs
/docs/handbook/babel-with-typescript.html
How to create a hybrid Babel + TypeScript project

Babel vs TypeScript์˜ tsc

๋ชจ๋˜ JavaScript ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ, TypeScript์—์„œ JavaScript ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฒฝ์šฐ ๊ทธ ๋Œ€๋‹ต์€ ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ "~์— ๋‹ฌ๋ ค์žˆ๋‹ค" ๋˜๋Š” "๋ˆ„๊ตฐ๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„ ๋Œ€์‹  ๊ฒฐ์ •ํ–ˆ์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค` ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ tsdx, Angular, NestJS์™€ ๊ฐ™์€ ๊ธฐ์กด ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” Getting Started์— ์–ธ๊ธ‰๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๋ฉด ๊ฒฐ์ •์€ ์—ฌ๋Ÿฌ๋ถ„ ์†์— ๋‹ฌ๋ ค์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์‚ฌ์šฉํ• ๋งŒํ•œ ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๋นŒ๋“œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ์™€ ์†Œ์Šค ์ž…๋ ฅ ํŒŒ์ผ์ด ๊ฑฐ์˜ ๋น„์Šทํ•œ๊ฐ€์š”? tsc๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ์—ฌ๋Ÿฌ ์ž ์žฌ์ ์ธ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‚ด๋Š” ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์ด ํ•„์š”ํ•˜์‹ ๊ฐ€์š”? babel๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง์„ ํ•˜๊ณ , tsc๋กœ ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•˜์„ธ์š”.

ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง์€ Babel, ํƒ€์ž…์€ tsc (Babel for transpiling, tsc for types)

JavaScript ์ฝ”๋“œ ๋ฒ ์ด์Šค์—์„œ TypeScript๋กœ ํฌํŒ…๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ์กด ๋นŒ๋“œ ์ธํ”„๋ผ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ์ˆ ์€, Babel์˜ preset-typescript์„ ์‚ฌ์šฉํ•˜์—ฌ JS ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ํ›„, TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž… ๊ฒ€์‚ฌ ๋ฐ .d.ts ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ณตํ•ฉ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

Babel์€ TypeScript๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์กด ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ณ  Babel์ด ์ฝ”๋“œ ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— JS ์ถœ๋ ฅ ์‹œ๊ฐ„์ด ๋” ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ€์ž… ๊ฒ€์‚ฌ์™€ d.ts ํŒŒ์ผ ์ƒ์„ฑ (Type Checking and d.ts file generation)

Babel ์‚ฌ์šฉ์˜ ๋‹จ์ ์€ TS๋ฅผ JS๋กœ ์ „ํ™˜ํ•˜๋Š” ๋™์•ˆ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์—๋””ํ„ฐ์—์„œ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ์žก์ง€ ๋ชปํ•˜๊ณ  ์ƒ์šฉ ์ฝ”๋“œ์— ํฌํ•จ๋  ์ˆ˜๋„ ์žˆ๋‹จ ๋œป์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, Babel์€ TypeScript์— ๋Œ€ํ•œ .d.ts ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ๊ฒฝ์šฐ ์ž‘์—…ํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด TSC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋Š” Babel ๊ตฌ์„ฑ์˜ ์ผ๋ถ€๋ฅผ ํ•ด๋‹น tsconfig.json์— ๋ณต์ œํ•˜๊ณ , ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:

"compilerOptions": {
  // tsc๋ฅผ ์‚ฌ์šฉํ•ด .js ํŒŒ์ผ์ด ์•„๋‹Œ .d.ts ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  "declaration": true,
  "emitDeclarationOnly": true,
  // Babel์ด TypeScript ํ”„๋กœ์ ํŠธ์˜ ํŒŒ์ผ์„ ์•ˆ์ „ํ•˜๊ฒŒ ํŠธ๋žœ์ŠคํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  "isolatedModules": true
}

ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”: