๐ค 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
Babel์ด๋ ๋ฌด์์ธ๊ฐ?
์ค๋์ ๋ฐ๋ฒจ์ ๋ํด์ ์ด์ผ๊ธฐ ํด ๋ณด๋ ค๊ณ ํ๋ค. ๋ฐ๋ฒจ์ด ๋ฌด์์ด๋ฉฐ, ์ ํ์ํ๊ณ , ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ด ์ด๋ป๊ฒ ๋๋์ง ๋ฑ๋ฑ์ ๋ํด์ ์ค๋ช ํด ๋ณด๋๋ก ํ๊ฒ ๋ค. ๋จผ์ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง(Cross Browsing)์ ๋ํด
devowen.com
'๐๊ณต๋ถ > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ํ์ดํํจ์ vs ์ผ๋ฐํจ์ (0) | 2021.10.09 |
---|---|
[JavaScript] window.requestAnimationFrame() (0) | 2021.10.07 |
[JavaScript] ์ด๋ฒคํธ ์์(Event delegation) (0) | 2021.09.23 |
[JavaScript] ์ด๋ฒคํธ ์บก์ณ๋ง(Event Capturing) (0) | 2021.09.23 |
[JavaScript] ์ด๋ฒคํธ ๋ฒ๋ธ๋ง(Event Bubbling) + e.stopPropagation() (0) | 2021.09.17 |
๋๊ธ