1. Babel CLI 설치
$ npm i --save-dev @babel/core @babel/cli
2. babelrc 설정 파일 작성
$ npm i --save-dev @babel/preset-env
- 지금 설치한 프로젝트 루트에
.babelrc 파일 생성
{
"presets": ["@babel/preset-env"]
}
3. 트랜스파일링
{
"scripts": {
"build:babel": "babel public/js -w -d public/dist/js"
}
}
- package.json의 scripts 부분
- 위 npm script는 src/js 폴더(타깃 폴더)에 있는 모든 ES6+ 파일들을 트랜스파일링한 후,
그 결과물을 dist/js 폴더에 저장한다.
- 사용한 옵션의 의미
-w
타깃 폴더에 있는 모든 파일들의 변경을 감지하여 자동으로 트랜스파일한다.
(--watch 옵션의 축약형)
-d
트랜스파일링된 결과물이 저장될 폴더를 지정한다.
(--out-dir 옵션의 축약형)
4. Babel 플러그인
export const pi = Math.PI;
export function power(x, y) {
return x ** y;
}
export class Foo {
#private = 10;
foo() {
const { a, b, ...x } = { ...{ a: 1, b: 2 }, c: 3, d: 4 };
return { a, b, x };
}
bar() {
return this.#private;
}
}
에러 로그
SyntaxError: C:\Users\Administrator\Desktop\Develop\Develop_File\Study\CodeSquad\FE08\06 (FreeStyle)\fe-w6-free-style\public\js\.babel_test\lib.js: Support for the experimental syntax 'classPrivateProperties' isn't currently enabled (13:5):
11 | export class Foo {
12 | // stage 3: 클래스 필드 정의 제안
> 13 |
| ^
14 |
15 | foo() {
16 | // stage 4: 객체 Rest/Spread 프로퍼티
- 이 에러는
@babel/preset-env는 현재 제안 단계에 있는 사양에 대한
플러그인을 지원하지 않기 때문에 발생한 에러임.
현재 제안 단계에 있는 사양을 지원하려면 별도의 플러그인을 설치해야 함.
위 에러를 해결하려면..
$ npm i --save-dev @babel/plugin-proposal-class-properties
설치 후, .babelrc파일에 추가
{
"presets": ["@babel/preset-env"],
"plugins": ["@babel/plugin-proposal-class-properties"]
}
5. 브라우저 모듈 로딩 테스트
- 모듈 기능은 node.js 환경에서 동작한 것이고 Babel이 모듈을 트랜스파일링한 것도
node.js가 기본 지원하는 CommonJS 방식의 module loading system에 따른 것임.
'use strict';
var _lib = require('./lib');
console.log(_lib.pi);
console.log((0, _lib.power)(_lib.pi, _lib.pi));
var f = new _lib.Foo();
console.log(f.foo());
console.log(f.bar());
에러 예시
<!DOCTYPE html>
<html>
<body>
<script src="dist/js/lib.js"></script>
<script src="dist/js/main.js"></script>
</body>
</html>
에러 로그
Uncaught ReferenceError: exports is not defined
at lib.js:3
main.js:3 Uncaught ReferenceError: require is not defined
at main.js:3
이렇게 트랜스파일링된 코드는
브라우저에서 CommonJS 방식의 module loading system(require 함수)을
지원하지 않으므로 그대로 브라우저에서 실행하면 에러가 발생
참고 자료
1. Babel CLI 설치
babel-core,babel-cli설치2. babelrc 설정 파일 작성
.babelrc파일 생성3. 트랜스파일링
그 결과물을 dist/js 폴더에 저장한다.
4. Babel 플러그인
클래스 필드 정의 제안 플러그인 (Babel 사이트에서 "Class field" 검색)
트랜스파일링 할 때 아래 예시 코드처럼 에러나는 부분이 있음.
그럴 경우 플러그인 검색해서 설치 후 해결
에러 로그
@babel/preset-env는 현재 제안 단계에 있는 사양에 대한플러그인을 지원하지 않기 때문에 발생한 에러임.
현재 제안 단계에 있는 사양을 지원하려면 별도의 플러그인을 설치해야 함.
위 에러를 해결하려면..
설치 후,
.babelrc파일에 추가5. 브라우저 모듈 로딩 테스트
node.js가 기본 지원하는 CommonJS 방식의 module loading system에 따른 것임.
에러 예시
에러 로그
이렇게 트랜스파일링된 코드는
브라우저에서 CommonJS 방식의 module loading system(require 함수)을
지원하지 않으므로 그대로 브라우저에서 실행하면 에러가 발생
참고 자료