๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

babel ์ด๋ž€?

์ตœ์‹  ES6 JS์ฝ”๋“œ๋ฅผ ๋ฌด๋‚œํ•œ ์˜ˆ์ „์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ"์ด๋‹ค.

 

babel ์„ค์น˜

npm install @babel/node
npm install @babel/core
npm install @babel/preset-env
npm install core-js@3

// ๋งŒ์•ฝ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ํ”„๋ฆฌ์…‹์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ์—ฌ๊ธฐ์„  envํ”„๋ฆฌ์…‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

โ€‹

.babelrc ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

- ๋ฐ”๋ฒจ์˜ ํ”„๋ฆฌ์…‹์„ ์„ค์ •ํ•˜๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.

- ๋ฐ”๋ฒจ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ด ํŒŒ์ผ ๊ฑฐ์ณ, ์„ค์ •ํ•ด๋‘” ํ”„๋ฆฌ์…‹์„ ์ฝ๊ฒŒ ๋œ๋‹ค.

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "entry",
        "corejs": 3
      }
    ]
  ]
}

 

babel๋กœ ์‹คํ–‰ํ•˜๊ธฐโ€‹

- node๊ฐ€ index.js๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  babel์ด ์‹คํ–‰ํ•ด์ค€๋‹ค.

- package.jsonํŒŒ์ผ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค.

  {
  "scripts": {
    "start": "babel-node init.js"
  },
  ...
  }
import "core-js";

 

 

nodemon ์ด๋ž€?

๋ณ€๊ฒฝํ•œ ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋งˆ๋‹ค, ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋‹ค.

์„œ๋ฒ„ ๊ฐœ๋ฐœ์‹œ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

nodemon์„ค์น˜ ๋ฐ ์‹คํ–‰

npm install -g nodemon
// ์‹œ์Šคํ…œ ๊ฒฝ๋กœ์— ๊ธ€๋กœ๋ฒŒํ•˜๊ฒŒ ์„ค์น˜ํ•  ๊ฒฝ์šฐ
npm install --save-dev nodemon
= npm i nodemon -D

// ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋กœ ์„ค์น˜ํ•  ๊ฒฝ์šฐ
// = dependency(ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ ๋  ํŒจํ‚ค์ง€)์™€ ๊ด€๋ จ ์—†์ด ์„ค์น˜ํ•  ๊ฒฝ์šฐ

 

- package.jsonํŒŒ์ผ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค.

"scripts":
	"start": "nodemon index.js"

// npm start ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์ด ์ €์žฅ๋  ๋•Œ ๋งˆ๋‹ค ์„œ๋ฒ„๋ฅผ ์žฌ์‹คํ–‰ํ•œ๋‹ค.


์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ

1. "babel-node module cannot be found" 

package.jsonํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

1) npx: babel-node๊ฐ€ binary ์‹คํ–‰ ํŒŒ์ผ์ด๋ผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ๊ฒฝ๋กœ ์„ค์ •์„ ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ, npx์„ ์ด์šฉํ•ด ์‹คํ–‰์‹œ์ผœ์ฃผ์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

2) --exec๋Š” nodemon ํŒจํ‚ค์ง€๋ฅผ ์˜คํ”ˆํ•˜๋ผ๋Š” ๋ช…๋ น์–ด

  "scripts":
 {
    "start": "nodemon --exec npx babel-node init.js"
 }

 

2. Warning: To load an ES module, set “type”: “module” 

์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ type:module๋กœ ๋Œ€์ฒด๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ํ›„์— webpack๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ 1๋ฒˆ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

3. ์„œ๋ฒ„๊ฐ€ ๋‘ ๋ฒˆ ๊ฐฑ์‹ ๋˜๋Š” ์˜ค๋ฅ˜

"scripts":
	"start": "nodemon index.js --delay 2"
    
//2์ดˆ์˜ ์—ฌ์œ ๋ฅผ ๋‘๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋ฒˆ์™ธ) polyfill ์ด๋ž€?

  • polyfill : ์ถฉ์ „์†œ์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์†œ์ด ๊บผ์กŒ์„๋•Œ ์ถฉ์ „์†œ์„ ์ฑ„์›Œ ๋ฉ”๊พธ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. -> ๋ฌด์—‡์„ ๋ฉ”๊พธ๋Š”๊ฐ€?
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ(์ถ”๊ฐ€๊ธฐ๋Šฅ)์„ ์˜๋ฏธํ•œ๋‹ค.

babel ๋งŒ ์žˆ์œผ๋ฉด ์žฅ๋•ก ์•„๋‹™๋‹ˆ๊นŒ?

  • ๋ฐ”๋ฒจ์€ ESNext ์—์„œ ์ง€์›ํ•˜๋Š” ๋ฌธ๋ฒ•์„ ES5 ๋ฌธ๋ฒ•์œผ๋กœ ๋ฒˆ์—ญํ•ด์ฃผ์ง€๋งŒ, ES5์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ES6์˜ Map, Promise, Set, Object.assigin() ์ด๋Ÿฐ์• ๋“ค์€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋‹ˆ ๋ฒˆ์—ญ์„ ํ•ด์ค„์ˆ˜๊ฐ€ ์—†๋‹ค.
  • ๊ทธ๋ž˜์„œ ์ €๊ฑธ ๋งค๊พธ๊ธฐ ์œ„ํ•ด polyfill ์„ ์‚ฌ์šฉํ•œ๋‹ค. (Map, Promise, Set ๋“ฑ์„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค)
  • babel ์€ babel-polyfill ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, ํ˜„์žฌ deprecated ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— core-js์™€ regenerator-runtime์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ๋‹ค.
๋ฐ˜์‘ํ˜•