babel
바벨은 JS 컴파일러다. ES2015+ 코드를 내가 명시한 타겟 브라우저에 맞게 변경해준다.
// 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;
});
이제 create-tmon-webapp에 포함된 바벨 설정을 보자.
{
"devDependencies": {
"@babel/core": "^7.4.5",
"@babel/plugin-transform-runtime": "^7.4.4",
"@babel/preset-env": "^7.4.5",
"@babel/preset-react": "^7.0.0"
},
"dependencies": {
"@babel/runtime": "^7.4.5",
"core-js": "^3.1.4"
}
}
@babel/core
babel config 파일을 이용하여 실제로 transpile을 진행.
@babel/preset-env
똑똑한 프리셋, 타겟환경에 필요한 구문(browserlist)을 개발자가 관리할 필요 없이 알아서 transform plugin과 core-js polyfill과 매핑한다.
주의할 점은 stage-x 플러그인을 지원하지 않는다!!
preset, plugin? plugin은 특정 syntax에 대한 것이다. @babel/plugin-transform-arrow-functions preset은 plugin들의 모음집. stage별로 (stage-X) 혹은 react, typescript와 같은 것들을 transpile 하기 위한 모음집들.
@babel/preset-react
react 관련 코드를 변형하기 위한 프리셋. 대표적으로 jsx -> React.createElement
@babel/plugin-transform-runtime
코드 사이즈를 절약하기 위해 바벨에서 주입해준 helper 함수 재사용해도록 도와주는 플러그인. (inline babel hleper -> @babel/runtime/helper 모듈 대신 사용.)
그래서 @babel/runtime을 dependency로 포함해야한다.
global scope 오염을 피하기 위해 사용
예제를 보고 싶으면 이동
core-js
잘 알려진 @babel/polyfill은 core-js와 regenerator-runtime을 import한다.
babel 7.4.0부터 polyfill은 deprecated 됐고, core-js와 regenerator-runtime을 각각 import 해야한다. 참고
module.exports = {
presets: [
[
'@babel/preset-env',
{
modules: false, // webpack이 import문을 통해 최적화된 dependengy graph를 그릴 수 있음.
useBuiltIns: 'usage', // 서비스 코드에서 필요한 polyfill(core-js)만 포함.
corejs: 3,
},
],
['@babel/preset-react'],
],
plugins: [
[
'@babel/plugin-transform-runtime',
{
corejs: 3,
},
],
],
};
Last updated
Was this helpful?