transpiler는 source-to-source
컴파일러다.
js에서는 es6, es7등 최신 js spec을 범용적으로 지원되는 es5 로 변경하기위해 사용한다.
화살표함수 (es6) -> function 키워드
const greet = (name) => `Hello, ${name}!`;
변경 후
var greet = function(name) {
return 'Hello, ' + name + '!';
};
대표적인 트랜스파일러는 Babel
, tsc
, Postcss
각각의 이런 js 파일이 있다고 해보자.
// entry.js
import { sum } from './math';
console.log(sum(1, 2)); // Outputs: 3
// math.js
export const sum = (a, b) => a + b;
이 스크립트가 있는 프로젝트를 웹팩으로 번들링하면 이런 식의 결과물이 나온다.
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./src/math.js":
/*!*********************!*\
!*** ./src/math.js ***!
\*********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "sum": () => /* binding */ sum
/* harmony export */ });
function sum(x, y) {
return x + y;
}
/***/ }),
/***/ "./src/index.js":
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var _math = __webpack_require__(/*! ./math */ "./src/math.js");
console.log((0, _math.sum)(2, 3));
/***/ })
/******/ });
/************************************************************************/
번들링이라는 행위는 여러개의 js 파일을 하나로 묶어주는 역할을 한다.
대표적인 번들러는 Webpack
, esbuild
Nextjs
의 번들링 및 트랜스파일링, minify의 기능은 rust로 작성된 swc가 담당한다.Vite
는 통합 빌드 도구로 여러가지 기능을 지원한다.Rollup
, 사전 번들링은 esbuild
를 사용한다.esbuild
를 사용