Java Scripts
What is babel?
HobbyCoding
2021. 12. 28. 06:15
728x90
babel 이란?
- Babel is a JavaScript compiler.
- babel 은 javascript 로 결과물을 만들어주는 컴파일러 ( 소스 대 소스 컴파일러)
javascript 로 변환하는 과정이 왜 필요한가?
ESNext 문법을 기존의 브라우져에 사용하기 위해서 babel 은 필수적이다 왜내하면 예전 브라우져 예전 os 사용하는 경우가 많기 때문에 최신 문법으로 설계된 javascript 를 돌리기 위함이다.
polyfill 은 무엇??
- polyfill은 브라우저에서 지원하지 않는 기능들에 대한 호환성 작업을 채워 넣는것.
- babel 은 이러한 polyfill 을 손쉽게 지원하기 위해 babel-polyfill 기능을 지원
- babel 은 컴파일시에 실행되고 babel-polyfill 은 런타임에 실행
아래는 최근 브라우져 2가지의 버전만 지원하면서 IE의 경우 10버전 이하는 제외하는 설정
{
"presets": [
["env", {
"targets": {
"browsers": ["last 2 versions", "not ie <= 10"]
}
}]
]
}
TypeScript와 JSX 지원
ES6 이상의 최신 문법 뿐만 아니라 TypeScript나 JSX로 작성된 코드를 변환할 때도 많이 사용
실습
실습 프로젝트 셋업
terminal 에서 npm project 를 생성한다
$ mkdir learn-babel
$ cd learn-babel
$ npm init -y
Sample Code 작성
before.js 를 아래와 같이 작성함
[1, 2, 3].map((n) => n + 1);
Babel 설치
@babel/core와 @babel/cli 패키지를 개발의존성(devDependencies)으로 설치 ( 빌드시에만 필요함)
$ npm i -D @babel/core @babel/cli
Plugin/Preset 설정
- Babel에게 플러그인(plugin)이나 프리셋(preset)을 통하여 문법 변환 규칙을 알려줌
- plugin은 규칙 하나 하나를 미세하게 적용할 때 사용하고 preset은 여러 개의 규칙을 한 번에 적용할 때 사용
- @babel/preset-env 패키지를 개발의존성(devDependencies)으로 설치 ( 빌드시에만 필요함)
$ npm i -D @babel/preset-env
Babel 설정 파일
project 단위에 .babelrc 파일을 생성 후에 다음과 같이 설정을 추가
{
"presets": ["@babel/env"]
}
많이 사용되는 command 와 option 들
npx babel before.js // compile 된 결과를 아래와 같이 출력함
$ npx babel before.js
"use strict";
[1, 2, 3].map(function (n) {
return n + 1;
});
npx babel before.js -o after.js // 결과를 after.js 로 저장
npx babel src -d dist // src directory 의 모든 javascript file 을 변환하여 dist 에 저장함
정리
Babel이 이렇게 단독으로 사용되기도 하지만 프로젝트에서는 보통 Webpack이나 Rollup과 같은 번들러(bundler)와 함께 사용되거나 프레임워크의 일부로 포함된다.