๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Development

๋ฐ”๋ฒจ(Babel)

by DevIseo 2023. 6. 15.

๋ฐ”๋ฒจ(Babel)

๐Ÿ’ก

๋ฐ”๋ฒจ(Babel)์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ(transpiler)๋กœ, ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๊ตฌ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.


  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ES6๋‚˜ ES7(์ตœ์‹ ํ‘œ์ค€) ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ๋•Œ๋ฌธ์— ES5๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ณผ์ •์ด ํ•„์š”
  • ์ด ๊ณผ์ •์„ ํ•ด์ฃผ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ”๋ฒจ
  • babel์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ชจ๋“  ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋ฅผ ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹˜
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์ž‘์—…์ด ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘์— ์ง„ํ–‰๋˜์–ด์•ผํ•จ
    • ์ด ์—ญํ• ์€ babel-polyfill์ด ๋‹ด๋‹น

๋ฐ”๋ฒจ์˜ ์ฃผ์š” ์—ญํ• 

  1. ํŠธ๋ Œ์Šค ํŒŒ์ผ๋Ÿฌ

๋ฐ”๋ฒจ์€ ์ฝ”๋“œ๋ฅผ ์žฌ์ž‘์„ฑํ•ด์ฃผ๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ

  • ์ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ๊ตฌ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝ
  • ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ๋Š” ์›น์‚ฌ์ดํŠธ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ
  • ์›นํŒฉ(webpack)๊ณผ ๊ฐ™์€ ๋ชจ๋˜ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ๋™์ž‘
  • ์ด๋Ÿฐ ๊ณผ์ •์ด ์—†์œผ๋ฉด ๊ฐœ๋ฐœ์ด ๋๋‚œ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฐ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ
  1. ํด๋ฆฌํ•„

๋ณ€๊ฒฝ๋œ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ธฐ์กด ํ•จ์ˆ˜์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜์˜ ์Šคํฌ๋ฆฝํŠธ

  • ์ƒˆ๋กญ๊ฒŒ ํ‘œ์ค€์— ์ถ”๊ฐ€๋œ ํ•จ์ˆ˜๋Š” ๋ช…์„ธ์„œ ๋‚ด ์ •์˜๋ฅผ ์ฝ๊ณ  ์ด์— ๋งž๊ฒŒ ์ง์ ‘ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • . ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋งค์šฐ ๋™์ ์ธ ์–ธ์–ด๋ผ์„œ ์›ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์–ด๋–ค ํ•จ์ˆ˜๋ผ๋„ ์Šคํฌ๋ฆฝํŠธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ธฐ์กด ํ•จ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ
  • ๊ฐœ๋ฐœ์ž๋Š” ์Šคํฌ๋ฆฝํŠธ์— ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•ด์„œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ตœ์‹  ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Œ
  • ํด๋ฆฌํ•„(polyfill)์€ ๋ง ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„์ด ๋ˆ„๋ฝ๋œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋ฉ”๊ฟ”์ฃผ๋Š”(fill in) ์—ญํ• 
    • ์ฃผ๋ชฉํ•  ๋งŒํ•œ ํด๋ฆฌํ•„ ๋‘ ๊ฐ€์ง€
      • core js – ๋‹ค์–‘ํ•œ ํด๋ฆฌํ•„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ๊ธฐ๋Šฅ์˜ ํด๋ฆฌํ•„๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ
      • polyfill.io – ๊ธฐ๋Šฅ์ด๋‚˜ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ํด๋ฆฌํ•„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ์„œ๋น„์Šค

.babelrc

๐Ÿ’ก .babelrc

Babel ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์„ค์ • ํŒŒ์ผ

  • JSON ํ˜•์‹ ๋˜๋Š” JavaScript ๋ชจ๋“ˆ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ
  • Babel์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ”„๋ฆฌ์…‹์„ ๊ตฌ์„ฑํ•˜๋Š” ์„ค์ • ์ •๋ณด๊ฐ€ ํฌํ•จ
  • ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ฐœ๋ณ„ ๋ณ€ํ™˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ํ”„๋ฆฌ์…‹์€ ํŠน์ • ํ™˜๊ฒฝ ๋˜๋Š” ํ”Œ๋žซํผ์„ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ณ€ํ™˜ ์„ค์ •์„ ์ œ๊ณต </aside>

1. presets

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ]
}
  • presets ์†์„ฑ์€ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ณ€ํ™˜ ์„ค์ • ๊ทธ๋ฃน์„ ์ง€์ •
  • ํ”„๋ฆฌ์…‹์€ ์ผ๋ จ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ํŠน์ • ํ™˜๊ฒฝ์ด๋‚˜ ํ”Œ๋žซํผ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

2. plugins

{
  "plugins": [
    "@babel/plugin-transform-arrow-functions",
    "@babel/plugin-transform-classes"
  ]
}
  • ๊ฐœ๋ณ„์ ์ธ ๋ณ€ํ™˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง€์ •
  • ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋ณ€ํ™˜ํ•  ํŠน์ • ๊ธฐ๋Šฅ ๋˜๋Š” ๋ฌธ๋ฒ•์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ, ์ž์‹ ๋งŒ์˜ ๋ณ€ํ™˜ ๊ทœ์น™์„ ์ •์˜

3. ovverrides

{
  "presets": [
    "@babel/preset-env"
  ],
  "overrides": [
    {
      "test": "./src/app",
      "presets": [
        "@babel/preset-react"
      ]
    }
  ]
}
  • ํŠน์ • ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ๋ณ€ํ™˜ ์„ค์ •์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  • ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€ JavaScript ํŒŒ์ผ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋ณ€ํ™˜ ๊ทœ์น™์„ ์ ์šฉ

Reference

https://juneyr.dev/2019-02-20/webpack-babel

https://ko.javascript.info/polyfills

'Development' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์›นํŒฉ(Webpack)  (0) 2023.06.15
[axios] axios 2  (0) 2023.01.27
[axios] axios 1  (0) 2023.01.21
[npm].npmrc  (0) 2023.01.19

๋Œ“๊ธ€