๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’๊ณต๋ถ€/JS

[JavaScript] Babel

by rindev 2021. 9. 25.

๐Ÿค” Babel??

๋ฐ”๋ฒจ = ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ (๋ฐ”๋ฒจ ๊ณตํ™ˆ์— ๊ทธ๋ ‡๊ฒŒ ์จ์žˆ๋‹ค!)

ES6+ ์ด์ƒ์˜ ์ตœ์‹  ECMAScript๋ฌธ๋ฒ•์„ ์ด์ „ ๋ฌธ๋ฒ•(~ES5)์œผ๋กœ ๋ณ€ํ™˜

 

๐Ÿค” ๊ทธ๋ž˜์„œ ๊ทธ๊ฑธ ์™œ ์“ฐ๋Š”๋ฐ?

์šฐ๋ฆฌ์˜ ์˜์›ํ•œ ์นœ๊ตฌ(^^) IE์™€... IE ๋ง๊ณ ๋„ ์ตœ์‹  ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜์ง€์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—!

๋ชจ๋“  ์‹คํ–‰ํ™˜๊ฒฝ์—์„œ js๊ฐ€ ๋Œ์•„๊ฐ€๋„๋ก ํ•˜๋Š” ๋Š๋‚Œ์ด๋‹ค.

// Babel Input: ES2015 arrow function
[1, 2, 3].map(n => n + 1);

// Babel Output: ES5 equivalent
[1, 2, 3].map(function(n) {
  return n + 1;
});

 

๐Ÿ˜Ž ๋ฐ”๋ฒจ์„ ์จ๋ณด์ž

yarn add -D @babel/core @babel/cli \
              @babel/register @babel/preset-env \
              @babel/preset-foo @babel/plugin-bar
              @babel/why-should-i-install-this
              # ...

์„ค์น˜ํ• ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, ๊ต‰์žฅํžˆ ์ •๋ฆฌ๋ฅผ ์ž˜ ํ•ด๋‘์‹  ๋ธ”๋กœ๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•ด์„œ ์ฐธ๊ณ ํ•ด์„œ ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

  • @babel/core : ์š”๋ฆฌ์‚ฌ. ์žฌ๋ฃŒ๋ž‘ ๋ ˆ์‹œํ”ผ๊ฐ€ ์žˆ์œผ๋ฉด ์š”๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • @babel/cli : ์กฐ๋ฆฌ ๋„๊ตฌ
    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๊ธฐ๋ณธ์ ์ธ ๋ฐ”๋ฒจ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ์„ค์น˜ํ•ด๋„ ๋จ
  • ํ”Œ๋Ÿฌ๊ทธ์ธ : ์žฌ๋ฃŒ ์†์งˆ ๋˜๋Š” ์š”๋ฆฌ ๋ฐฉ๋ฒ•์ด ์ •๋ฆฌ๋œ ๋ ˆ์‹œํ”ผ.
  • ํ”„๋ฆฌ์…‹ : ์—ฌ๋Ÿฌ ๋ ˆ์‹œํ”ผ๋ฅผ ๋ชจ์•„๋‘” ์š”๋ฆฌ์ฑ…. ์ตœ๊ทผ์— ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” ํ”„๋ฆฌ์…‹์€ @babel/preset-env ๋ผ๊ณ  ํ•œ๋‹ค.
    @babel/preset-env ๋Š” ES6์ด์ƒ ๋ฌธ๋ฒ•์„ ES5 ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ชจ๋“  ๊ทœ์น™์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

 

$ npx babel test.js --presets=@babel/env

๊ทธ๋ž˜์„œ ๊ทธ๊ฑธ ์ ์šฉํ•˜๋ ค๋ฉด ํ„ฐ๋ฏธ๋„์— ์ด๋ ‡๊ฒŒ env๋ผ๋Š” preset์„ ์“ธ๊ฑฐ๋ผ๊ณ  ์•Œ๋ ค...........์ค„ ์ˆ˜ ๋„ ์žˆ์ง€๋งŒ!

๋งค ๋ฒˆ ํ„ฐ๋ฏธ๋„์— ์ด๋ ‡๊ฒŒ ์ž…๋ ฅํ•˜๋Š”๊ฑด ๋งค์šฐ ๊ท€์ฐฎ์€ ์ง“์ด๋ฏ€๋กœ ์„ค์ •ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.

 

ํ”„๋กœ์ ํŠธ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— .babelrc ํŒŒ์ผ์„ ์ƒ์„ฑ ํ›„, ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•œ๋‹ค.

// .babelrc
{
  "presets": ["@babel/env"]
}

๊ทธ๋Ÿฌ๋ฉด ๊ทธ๋ƒฅ ์•„๋ž˜์™€ ๊ฐ™์ด ์‹คํ–‰ํ•ด๋„ preset์ด ์ ์šฉ๋œ๋‹ค.

$ npx babel test.js

 

 

๊ทธ๋ฆฌ๊ณ  ํŠน์ • ๋ธŒ๋ผ์šฐ์ € ๋ฒ„์ „ ์ด์ƒ์„ ์ง€์›ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ๋ฐ”๋ฒจ ์„ค์ •ํŒŒ์ผ์—์„œ targets ์†์„ฑ ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

// babel.config.json
module.exports = {
  presets: [
    [
      '@babel/preset-env',
      {
        targets: {
          chrome: '79', // ํฌ๋กฌ79๊นŒ์ง€ ์ง€์›
          ie: '11' // ie11๊นŒ์ง€ ์ง€์›
        }
      }
    ]
  ]
}

 

๋ฐ”๋ฒจ ์„ค์ •ํŒŒ์ผ์€ .babelrc, babel.config.js, babel.config.json์„ ์ฃผ๋กœ ์“ด๋‹ค.

  • .babelrc : ์ฃผ๋กœ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋‚˜ ํŒŒ์ผ์—์„œ ํŠน์ • ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๋ณ€ํ™˜์„ ์‹คํ–‰ํ•  ๋•Œ ์ ์ ˆ
  • babel.config.js : ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์ ํŠธ์—์„œ ๊ทœ์น™์„ ์„ค์ •ํ•  ๋•Œ ์ ์ ˆ
  • babel.config.json : config.js๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ์„ฑํ•˜๋Š” api๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ config.json์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์„ ๋“ฏ.

 

๐Ÿ‘€ ์ฐธ๊ณ 

๋”๋ณด๊ธฐ

https://tecoble.techcourse.co.kr/post/2021-07-07-babel/

 

Babel

๋ฐ”๋ฒจ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋…์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 0. Intro…

tecoble.techcourse.co.kr

 

https://imch.dev/posts/babel-practice/

 

Babel ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ

CRA๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋ฒจ ์„ค์ •์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฃผ ์–ธ์–ด๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐ”๋ฒจ์„ ๋ชจ๋ฅธ์ฒ™ ํ•  ์ˆ˜๋Š” ์—†๊ธฐ์— ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐ”๋ฒจ์„ ์„ค์น˜ํ•ด์„œ ์ ์šฉํ•˜

imch.dev

 

https://devowen.com/293

 

Babel์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์˜ค๋Š˜์€ ๋ฐ”๋ฒจ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ ํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋ฐ”๋ฒจ์ด ๋ฌด์—‡์ด๋ฉฐ, ์™œ ํ•„์š”ํ•˜๊ณ , ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์ด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๋“ฑ๋“ฑ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ๋จผ์ € ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•(Cross Browsing)์— ๋Œ€ํ•ด

devowen.com

 

๋Œ“๊ธ€