Babel
기본 정보
- 이름: Babel
- 분류: JavaScript 트랜스파일러(Transpiler)
- 개발사: Babel Team
- 최초 공개: 2014년
- 주요 용도: 최신 JavaScript 코드를 구형 환경에서도 실행 가능하도록 변환
- 관련 주제: #Babel #JavaScript #ES6 #TypeScript #Webpack
개요
Babel은 최신 JavaScript(ES6+) 및 일부 TypeScript, JSX 코드를 이전 버전의 JavaScript(ES5 등)로 변환(Transpile)하는 도구이다.
브라우저마다 지원하는 JavaScript 기능이 다르기 때문에, Babel을 사용하면 최신 문법을 작성하면서도 오래된 브라우저에서도 실행될 수 있도록 코드를 변환할 수 있다.
React, Next.js, Vue.js 등 대부분의 프론트엔드 프로젝트에서 빌드 도구와 함께 사용된다.
Babel 구조
ES2024
TypeScript
JSX
↓
Babel
↓
ES5 JavaScript
↓
Browser
동작 과정
개발자가 최신 문법 작성
↓
Babel
↓
구형 문법으로 변환
↓
Webpack / Vite
↓
브라우저 실행
주요 특징
- 최신 JavaScript 지원
- ES5 변환
- JSX 변환
- TypeScript 지원(문법 변환)
- 플러그인 시스템
- Preset 지원
- 브라우저 호환성 향상
Transpile이란?
Transpile은 한 고급 언어를 같은 수준의 다른 코드로 변환하는 과정이다.
ES6 JavaScript
↓
Babel
↓
ES5 JavaScript
컴파일(Compile)과 달리 같은 언어 계열 내에서 변환이 이루어진다.
예제
ES6 코드
const add = (a, b) => a + b;
Babel 변환 후
var add = function(a, b) {
return a + b;
};
화살표 함수가 일반 함수로 변환된다.
let / const 변환
변환 전
let name = "구름";
변환 후
var name = "구름";
클래스 변환
변환 전
class User {
hello(){
console.log("Hello");
}
}
Babel은 이를 ES5 함수 기반 코드로 변환한다.
JSX 변환
React 코드
function App(){
return <h1>Hello</h1>;
}
↓
React.createElement(
"h1",
null,
"Hello"
);
JSX는 브라우저가 직접 이해하지 못하기 때문에 Babel이 변환한다.
설치
npm install --save-dev
@babel/core
@babel/cli
Preset
Preset은 여러 플러그인을 묶은 패키지이다.
대표 Preset
@babel/preset-env@babel/preset-react@babel/preset-typescript
preset-env
{
"presets": [
"@babel/preset-env"
]
}
브라우저 지원 범위에 맞게 필요한 문법만 변환한다.
TypeScript 지원
let age: number = 30;
Babel은 타입 정보를 제거하여 JavaScript 코드로 변환한다.
단, 타입 검사(Type Checking)는 수행하지 않는다.
Babel과 TypeScript 관계
TypeScript
↓
Babel
↓
JavaScript
↓
Browser
타입 오류 검사는 tsc가 담당하며, Babel은 코드 변환을 담당한다.
Polyfill
새로운 JavaScript 기능을 오래된 브라우저에서도 사용할 수 있도록 구현한 코드이다.
예시
Array.from()
Promise
Map
Set
Babel은 필요에 따라 Polyfill과 함께 사용된다.
Babel과 Webpack
JavaScript
↓
Babel
↓
Webpack
↓
Bundle
↓
Browser
Webpack은 파일을 묶고(Bundle), Babel은 문법을 변환한다.
Babel과 Vite
Source Code
↓
Vite
↓
esbuild
↓
Browser
Vite는 기본적으로 esbuild를 사용하며, 필요 시 Babel 플러그인을 함께 사용할 수 있다.
Babel과 SWC 비교
| Babel | SWC |
|---|---|
| JavaScript 기반 | Rust 기반 |
| 플러그인 생태계 풍부 | 매우 빠른 속도 |
| 오래된 표준 | 최신 빌드 환경 채택 증가 |
| 설정 다양 | 성능 중심 |
Next.js는 최근 기본적으로 SWC를 사용한다.
대표 활용 분야
- React 프로젝트
- Next.js 프로젝트
- Vue 프로젝트
- TypeScript 프로젝트
- 레거시 브라우저 지원
- 라이브러리 개발
- 웹 애플리케이션
장점
- 최신 문법 사용 가능
- 브라우저 호환성 향상
- JSX 지원
- TypeScript 문법 지원
- 풍부한 플러그인
- 다양한 빌드 도구와 연동 가능
단점
- 빌드 시간이 증가할 수 있음
- 설정이 복잡할 수 있음
- 타입 검사는 수행하지 않음
- 최신 환경에서는 SWC, esbuild보다 느릴 수 있음
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
@babel/preset-env사용browserslist설정으로 지원 브라우저 명시- React 프로젝트는
@babel/preset-react적용 - TypeScript는
tsc와 함께 사용하거나 SWC 활용 검토 - Polyfill은 필요한 기능만 포함
- Babel 설정은
.babelrc또는babel.config.json으로 관리 - Webpack, Vite 등 빌드 도구와 함께 구성
- 불필요한 플러그인 사용 최소화
- 최신 프로젝트에서는 SWC 성능도 비교 검토
- 빌드 결과를 브라우저에서 테스트
Babel과 함께 사용하는 기술
대표 개발 도구
- Babel CLI
- Webpack
- Vite
- Parcel
- Rollup
- Visual Studio Code
관련 문서
출처
- Babel 공식 홈페이지
- Babel 공식 문서
- ECMAScript 관련 기술 문서