안녕하세요~ 이번에는 바벨(Babel)에 대해 알아보려고 합니다. 😃
바벨은 크로스 브라우징의 혼란을 해결해 줄 수 있답니다. 모든 브라우저에서 동작하도록 호환성을 지켜주지요. 타입스크립트, JSX처럼 다른 언어로 분류되는 것도 포함입니다. 먼저 바벨을 사용하려면 패키지들을 설치해주어야 합니다.
설치명령어
$npm install @babel/core @babel/cli
@babel/cli는 바벨 터미널을 사용하기 위해 설치해요. 바벨 실행 할 때는 터미널창에
npx babel app.js
를 입력해서 실행하면 됩니다.
바벨은 세 단계로 빌드를 진행합니다 !
1. 파싱 : 단어들을 분해하는 과정이라고 보면 됩니다.
const alert = (msg) => window.alert(msg);
이 코드를 봤을 때 const 라는 토큰과 alert라는 토큰과 이렇게 일일이 분해해서 봅니다.
2. 변환 : ES6를 ES5로 변환해주고 마지막으로
3. 출력 해줍니다.
1. block-scoping
ES6 문법을 ES5 문법으로 변환해주는 것이 block-scoping 플러그인 입니다. const와 let 처럼 블록 스코핑을 따르는 예약어를 함수 스코핑을 사용하는 var로 변경해줍니다.
$npm install -D @babel/plugin-transform-block-scoping
터미널창에 block-scoping를 설치하고
npx babel app.js --plugins @babel/plugin-transform-block-scoping
위 명령어를 입력하면 var alert = msg => window.alert(msg); 이렇게 출력되는 것을 확인해 볼 수 있습니다.
2. transform-arrow-functions
이 플러그인은var alert = msg => window.alert(msg); 여기서 사용된 var는 브라우저 익스플로어에서 인식을 해주는데 => 이 화살표 함수는 브라우저가 인식하지 못합니다. 이거를 변환시켜주는 플러그인이 바로 transform-arrow-functions 플러그인 입니다.
$npm install -D @babel/plugin-transform-arrow-functions
터미널창에 transform-arrow-functions를 설치하고
npx babel app.js --plugins @babel/plugin-transform-block-scoping --plugins @babel/plugin-transform-arrow-functions
위 명령어를 입력해보세요. 그리고 출력된 결과물을 보면
var alert = function (msg) {
return window.alert(msg);
};
화살표 함수가 사라지고 ES6 문법으로 변환된 것을 확인 됩니다 !
3. strict-mode
안전하게 작업하려면 엄격모드를 사용해야 합니다. 'use strict' 구문을 추가해야 하므로 strict-mode 플러그인을 설치합시다.
$npm install @babel/plugin-transform-strict-mode
플러그인이 설치되었다면
npx babel app.js --plugins @babel/plugin-transform-block-scoping --plugins @babel/plugin-transform-arrow-functions
위 명령어를 입력해보세요!
"use strict";
var alert = function (msg) {
return window.alert(msg);
};
그럼 상단에 use strict가 찍히면서 엄격모드로 변환된 것이 나타납니다. 그리고 플러그인을 사용할 때 명령어들을 모두 사용하려다 보니 커맨드라인 명령어가 점점 길어지기 때문에 설정 파일로 분리하는 것이 좋습니다.
바벨 환경설정 파일인 [babel.config.js] 에서 설정해주시면 되는데요.
module.exports = {
plugins: [
"@babel/plugin-transform-block-scoping",
"@babel/plugin-transform-arrow-functions",
"@babel/plugin-transform-strict-mode",
],
};
이렇게 바벨 기본 설정파일에 그간 설치했던 플러그인들을 담아두면 커맨드 창에 npx babel app.js만 입력하여도 알아서 전부 동작됩니다.
또 다른 방법으로는 프리셋을 사용하시면 됩니다.
프리셋
목적에 맞게 여러가지 플러그인을 세트로 모아놓은 것을 프리셋이라고 합니다. [my-babel-preset.js] 라는 파일을 만들어 그동안 설치했던 플러그인들을 담아놓아요.
module.exports = function myBabelPreset() {
return {
Plugins: [
"@babel/plugin-transform-block-scoping",
"@babel/plugin-transform-arrow-functions",
"@babel/plugin-transform-strict-mode",
],
};
};
그리고 기존에 [babel.config.js] 파일에는
module.exports = {
presets: ["./my-babel-preset.js"],
};
프리셋 파일을 불러와줍니다. 그럼 프리셋에 있는 모든 플러그인들이 실행 됩니다.
지금까지 했던 과정들은 바벨에 대한 이해를 돕기 위한 시행이었고 사실 이렇게 바벨을 사용하는 것은 실무에서는 잘 쓰이지 않습니다.
다음편에는 바벨을 실무로는 어떻게 사용하는지 알아보겠습니다 !! 😃
'Setting' 카테고리의 다른 글
📚 웹팩 시작하기 ! 02 (자주 사용하는 플러그인) (0) | 2021.04.17 |
---|---|
📚 웹팩 시작하기 ! 01 (loader의 정의 그리고 자주 사용하는 로더) (0) | 2021.04.12 |
📚 웹팩 알아보기 (쓰는 이유, 다양한 모듈 스펙, 엔트리/아웃풋) (0) | 2021.04.12 |
🐥 타입스크립트에 쓰일 tsconfig.json 속성 기능 알아보기 (0) | 2021.04.12 |
🛠 리액트 개발 할 때 VS Code 유용한 확장 프로그램 ESLint / Prettier (0) | 2021.03.24 |