인프런 - 프론트엔드 개발환경의 이해와 실습-04
업데이트:
Babel
ES2015+
의 문법으로 작성된 자바스크립트 코드를 모든 브라우저에서 동작할 수 있도록 변환해주는 역할을 한다. 즉 하위브라우저나 최신문법을 지원하지않는 브라우저에서도 내가 작성한 코드가 동작할 수 있는 하위코드로 자동으로 변환해준다고 볼 수 있겠다.
Babel install
$ npm install @babel/core @babel/cli
// 실행명령어
$ npx babel app.js
바벨은 세단계로 빌드를 진행
- 파싱
- 변환
- 출력
Babel 사용법과 웹팩 통합
// 바벨에서 목적에 따라 제공하는 프리셋
$ preset-env // 과거에 버전별로 바벨 설치가 달랐지만 env 하나로 통합됨
$ preset-flow // flow 를 변환하기 위한 프리셋
$ preset-react // React 를 변환하기 위한 프리셋
$ preset-typescript // typescript 를 변환하기 위한 프리셋
$ npm i @babel/preset-env
// babel.config.js
module.exports = {
presets: [
'@babel/preset-env'
]
}
// 타겟 브라우저
module.exports = {
presets: [
['@babel/preset-env', {
targets: {
chrome: '79',
ie: '11'
}
}]
]
}
// 문법변환이 해당되지 않는 코드일때는 폴리필이 필요
module.exports = {
presets: [
['@babel/preset-env', {
targets: {
chrome: '79',
ie: '11'
},
useBuiltIns: 'usage', // 'entry', false
corejs: {
version: 2, // 3
}
}]
]
}
$ npx babel app.js
// 바벨로 변환된 문법
"use strict";
require("core-js/modules/es6.promise"); // 추가됨
require("core-js/modules/es6.object.to-string"); // 추가됨
new Promise();
웹팩으로 통합
$ npm i -D babel-loader
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
}
]
}
}
정리
- 바벨의 코어는 파싱과 출력만 담당하고 변환 작업은 플러그인이 처리한다.
- 여러개의 플러그인들을 모아놓은 세트를 프리셋 이라고하는데 env 프리셋을 사용한다.
- 바벨이 변환하지 못하는 코드는 폴리필이라 부르는 코드조각을 불러와 결과물에 로딩해서 해결한다.
댓글남기기