๋ฐ๋ฒจ(Babel)์ ์ ์ฌ์ฉํ ๊น?
- ๋ฐ๋ฒจ์ ํธ๋์คํ์ผ๋ฌ๋ก ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ(ํ์ ์คํฌ๋ฆฝํธ, JSX ํฌํจ)๊ฐ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋๋ก ๋ณํํด ์ค๋๋ค.
- ์คํ์ด ์๋๋ ๊ตฌ๋ฒ์ ์น๋ธ๋ผ์ฐ์ ๋ฅผ ๋์ํ๊ธฐ ์ํด ๋ฐฐํฌํ ๋์ ์์ ๋ฐฉ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํด์ ๋ฐฐํฌํ๋ ค๊ณ ์ฌ์ฉํฉ๋๋ค.
๋ฐ๋ฒจ ๋น๋ ๊ณผ์
- ํ์ฑ(Parsing): ์ฝ๋๋ฅผ ๋ถํดํ๋ ๊ณผ์
- ๋ณํ(Transforming): ES6 -> ES5 ๋ณํํ๋ ๊ณผ์
- ์ถ๋ ฅ(Printing): ๋ณ๊ฒฝ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ถ๋ ฅํ๋ ๊ณผ์
ํ๋ฌ๊ทธ์ธ
- ๋ฐ๋ฒจ ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ฒจ์ด ์ด๋ค ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ๋ณํํ ์ง์ ๋ํ ๊ท์น์ ๋ํ๋ ๋๋ค.
- ํ์ํ ๊ฒฝ์ฐ ํ๋ฌ๊ทธ์ธ์ ์ง์ ๋ง๋ ์ปค์คํ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๊ฑฐ๋ ์ ๋ง๋ค์ด์ง ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ ธ๋ค ์ฌ์ฉํฉ๋๋ค.
ex) .babelrc
{
"plugins": ["transform-decorators-legacy", "transform-class-properties"]
}
ํ๋ฆฌ์
ํ์ํ ํ๋ฌ๊ทธ์ธ์ ์ผ์ผ์ด ์ค์ ํ๊ธฐ ๋ฒ๊ฑฐ๋ก์ด๋ฐ ์ฌ๋ฌ ๊ฐ์ง ํ๋ฌ๊ทธ์ธ์ ์ธํธ๋ก ๋ชจ์ ๋์ ๊ฒ์ ํ๋ฆฌ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฐ๋ฒจ์ด ์ ๊ณตํ๋ ๋ํ์ ์ธ ํ๋ฆฌ์
- @babel/preset-env
- preset-env๋ ES5๋ฅผ ๋ณํํ ๋ ์ฌ์ฉํฉ๋๋ค.
- @babel/preset-react
- @babel/preset-typescript
- @babel/preset-flow
- preset-flow, preset-react, preset-typescript๋ flow, ๋ฆฌ์กํธ, ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณํํ๊ธฐ ์ํ ํ๋ฆฌ์ ์ ๋๋ค.
์๋ ์์ค์ ๊ฐ์ด ํ๊น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
ex) .babelrc
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"chrome": "72"
}
}
]
]
}
ํด๋ฆฌํ
ํด๋ฆฌํ์ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ์ง์ํ์ง ์๋ ๊ธฐ๋ฅ(Promise ๊ฐ์ ๊ฐ์ฒด๋ค์ ES5์ ์กด์ฌํ์ง ์๋ ๊ธฐ๋ฅ)์ ์ ๊ณตํฉ๋๋ค.
๋ฐํ์์ ๋ฑ๋ก๋์ง ์์ ๋ฉ์๋๋ ๊ธฐ๋ฅ์ ํด๋ฆฌํ์ ์ถ๊ฐํด์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด Object.FromEntries๋ฅผ caniuse์์ ํ์ธํด ๋ณด๋ฉด chrome 72 ๋ฒ์ ์์๋ ์ง์์ด ๋์ง ์์ต๋๋ค.
chrome 73 ๋ฒ์ ์ด์๋ถํฐ๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง chrome 72 ๋ฒ์ ์์๋ Object.FromEnties๋ function์ด ์๋๋ผ๋ ์๋ฌ ๋ฌธ๊ตฌ์ ํจ๊ป ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋๋ก ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค. ์ด์ ๊ฐ์ ๊ฒฝ์ฐ ํด๋ฆฌํ์ ์ถ๊ฐํ์ฌ ์ด์๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
useBuiltIns ์ต์
- usage
- ์ค์ ํ์ํ ํด๋ฆฌํ์ ์๋์ผ๋ก ์ถ๊ฐํด ์ค๋๋ค.
- entry
- ํ๊น ํ๊ฒฝ์ ํ์ํ ํน์ ๋ชจ๋๋ง ๊ฐ์ ธ์ค๊ธฐ๋ก ๋ฐ๊ฟ๋๋ค.
ex) .babelrc
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"chrome": "72" // ๋ชจ๋ฐ์ผ์น ์๋๋ก์ด๋ ๋๋ฐ์ด์ค ์ง์(๊ฐค๋ญ์ S8(v.8))
},
"useBuiltIns": "usage", // ํด๋ฆฌํ ์ฌ์ฉ ๋ฐฉ์ (entry)
"corejs": 3, // ํด๋ฆฌํ ๋ฒ์
"shippedProposals": true
}
]
]
}
import 'core-js/stable';
import 'regenerator-runtime/runtime';
'Frontend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React-Query (1) | 2022.10.11 |
---|---|
CRA(Create React App) ์นํฉ ์ค์ ํ๊ธฐ (2) | 2022.09.20 |
React์์ setInterval ์ฌ์ฉํ๊ธฐ (0) | 2022.07.28 |
React 18 ๋ฒ์ ์ ๋ฐ์ดํธ ์ ๋ฆฌ (0) | 2022.07.27 |
TDD (ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ) (0) | 2022.06.23 |