소스 코드를 동일한 수준의 추상화를 유지하면서 다른 형식의 소스 코드로 변환하는 도구이다.
주로 최신 문법을 구버전 문법으로 변환하거나, 한 프로그래밍 언어를 다른 언어로 변환하는 데 사용된다.
개발자가 최신 기능을 사용하면서도 다양한 실행 환경에서 코드를 문제없이 실행할 수 있도록 도와준다.
두 도구는 서로 다른 역할을 수행하며, 번들러는 주로 코드의 의존성을 관리하고 파일을 결합하는 데 사용되고, 트랜스파일러는 코드를 변환하는 데 중점을 둔다.
1. Entry Point 설정: 번들러가 지정된 진입점 파일(보통 index.js
또는 main.js
)을 로드한다.
2. Dependency Graph 생성:
Resolve 단계: 번들러는 진입점 파일에서 시작하여 import
또는 require
구문을 분석한다.
모듈 경로 결정: 번들러는 각 의존성 모듈의 경로를 확인하고, 해당 파일을 로드합니다. 이 과정에서 모든 모듈의 의존성을 재귀적으로 추적하여 전체 의존성 그래프를 생성한다.
3. 트랜스파일링:
4. 번들 생성:
💡 Tree Shaking이란?
불필요한 코드를 제거하여 최종 번들 크기를 줄이는 기술이다. 이는 ES6 모듈 시스템의 특성을 활용하여, 실제로 사용되지 않은 코드(import
되었지만 사용되지 않는 코드)를 식별하고 제거한다.
modules: false
로 설정하여 ES6 모듈을 Common JS 모듈로 변환하지 않도록 한다.{
"presets": [
["@babel/preset-env", { "modules": false }]
]
}
removeComents: true
옵션을 사용하여 주석을 제거하고, 불필요한 디버그 코드를 제외할 수 있다.위와 같이 트랜스파일러 설정을 올바르게 하면 Tree Shaking이 더 잘 작동하여 번들 크기를 크게 줄일 수 있다. 이는 애플리케이션의 로딩 속도와 성능을 향상시키는 데 중요한 역할을 한다.
ex) Optional Chaining(userInfo?.name
)이나 Array.prototype.at(memberList.at(-1)
)과 같은 최신 JavaScript 기능을 구버전 브라우저에서도 사용할 수 있도록 변환한다.
트랜스파일러는 최신 언어 기능을 구버전 환경에서도 사용할 수 있도록 변환해주는 도구로 코드 변환, 최적화, 브라우저 호환성 확보 등 다양한 목적으로 사용된다.
트랜스파일러의 올바른 설정과 사용을 통해 개발자는 최신 기술을 사용하면서도 다양한 환경에서 안정적으로 동작하는 애플리케이션을 만들 수 있다.
Compiling (and Transpiling) Explained
Babel: Javascript Compiler