Babel
๐ babel
Babel์ ์๋ฐ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๋ก ์๋์ ์ญํ ์ ํ์ฌ ๋ธ๋ผ์ฐ์ ํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ๊ตฌ๋ฌธ ๋ณํ
- ๋์ ํ๊ฒฝ์ ๋๋ฝ๋ ํด๋ฆฌํ ๊ธฐ๋ฅ
- ์์ค ์ฝ๋ ๋ณํ
Polyfill์ด๋, ๊ตฌ๋ฉ๋ ๋ฒฝ์ ์ถฉ์ ํด์ฃผ๋ ์์ ๋งํ๋ค. ํ๋ก๊ทธ๋๋ฐ์์๋ babel์ด globalThis์ ๊ฐ์ด ๋ชจ๋ ๊ฒ์ ์ปดํ์ผ ํด์ฃผ์ง ๋ชปํ๋ฏ๋ก ์ด ๋, core-js๋ผ๋ ํด๋ฆฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค.
์ปดํ์ผ๋ฌ vs ํธ๋์คํ์ผ๋ฌ
- ์ปดํ์ผ๋ฌ
ํ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ณํํด์ฃผ๋ ์ญํ ์ ํ๋ค.
- ํธ๋์คํ์ผ๋ฌ
ํ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋น์ทํ ์์ค์ ์ถ์ํ๋ฅผ ๊ฐ์ง ๋ค๋ฅธ ์ธ์ด๋ก ๋ณํํด์ฃผ๋ ์ญํ ์ ํ๋ค.
์ํคํผ๋์์ ๋ฐ๋ฅด๋ฉด, ์ปดํ์ผ๋ฌ๊ฐ ํธ๋์คํ์ผ๋ฌ๋ณด๋ค ํฐ ๋ฒ์ฃผ์ ์ํด์๋ค๊ณ ํ๋ค.
์ฌ์ฉ
- ๋ณ๋์ build ์์คํ ์ด ์๊ธฐ ๋๋ฌธ์ built-in์ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ์ค์นํ๋ค.
$npm i -D @babel/core @babel/cli @babel/preset-env
- babel ๊ตฌ์ฑํ์ผ ์ค์
1 | // babel.config.js |
useBuiltIns ์ต์ ์ ํด๋ฆฌํ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ตฌ์ฑํ๋ค. usage ์ต์ ๊ฐ์ ์ฌ์ฉํ๊ธฐ ์ํด core-js 3๋ฒ์ ์ ์ค์นํด์ผํ๋ค.
$npm i core-js@3
babel ๊ตฌ์ฑํ์ผ์ target์ ์ค์ ํด์ค ์ ์๋๋ฐ, ์ด ๋ target์ ์ด๋ค ๋ธ๋ผ์ฐ์ ๊น์ง ํธํ๋๋๋ก ํ ์ง ๋ฒ์๋ฅผ ์ ํด์ฃผ๋ ๊ธฐ์ค์ด ๋๋ค.
1 | // .browserslistrc |
target์ .browserslistrc ํ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ํธ๋ฆฌํ๋ค.
- ie 11 : ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ 11๋ง
- last 2 versions : ์ต์ ๋ธ๋ผ์ฐ์ ์ ๊ทธ ์ด์ ๋ฒ์ ๊น์ง
- last 2 node versions : node ์ต์ ๋ฒ์ ๊ณผ ๊ทธ ์ด์ ๋ฒ์ ๊น์ง
- not dead : ์ ๋ฐ์ดํธ๊ฐ ์ข ๋ฃ๋์ง ์์
์์ธํ ์ ๋ณด๋ฅผ ์๋ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ
- package.json์ ๋ช ๋ น์ด ๋ฑ๋ก
1 | // package.json |
ํ์ผ์ compile ํด์ค ์ ์๊ณ ํด๋๋ฅผ compile ํด์ค ์ ์๋ค.
watch ์ต์
์ถ๊ฐํ๋ฉด ํ์ผ์ด ๋ณ๊ฒฝ๋์ด ์ ์ฅ๋ ๋๋ง๋ค compile ์๋ ์ํํ๋ค.
๐ ์๊ฐ
babel, webpack์ ์์ฃผ ์ฌ์ฉํ์ง ์์ผ๋ ์ ๋๋ก ์์๋๋ฉด ํธํ ๊ฒ ๊ฐ๋ค. ์์ธํ ์ค์ ๋ค์ babel ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋๋ก ํ์.