Babel | PoiemaWeb

Babel

ES6 화살표 함수, ES7 지수 연산자 ⇒ ES5이하의 버전으로 변환시켜 준다.

[1, 2, 3].map(n => n ** n);
[1, 2, 3].map(function (n) {
  return Math.pow(n, n);
});
  1. Babel CLI, Preset 설치

    yarn init
    yarn add -D @babel/core @babel/cli
    yarn add -D @babel/preset-env
    

    루트에 .babelrc 파일 생성

    {
      "presets": ["@babel/preset-env"]
    }
    

    공식 프리셋

    플러그인 들을 프로젝트 지원 환경에 맞춰서 동적으로 결정한다.

    .browserslistrc 파일에 상세히 설정할 수 있다.

  2. 트랜스파일링하는 방법

    package.json

    "scripts": {
        "build": "babel src -w -d dist"
     },
    

    src 폴더(타깃) —트랜스파일링—> dist 폴더(결과)에 저장

    -w 타깃 폴더에 있는 모든 파일들의 변경을 감지하여 자동으로 트랜스파일한다. (--watch 옵션의 축약형)

    -d 트랜스파일링된 결과물이 저장될 폴더를 지정한다. (--out-dir 옵션의 축약형)

    yarn build
    

    dist폴더는 알아서 생성된다.

  3. 플러그인 설정하는 방법

    트랜스파일하면서 프리셋이 지원하지않는 플러그인에서 에러가 발생한다. 별도로 설치하자.

    // ES6 클래스
    export class Foo {
      // 클래스 필드 정의 제안
      #private = 10;
    	bar() {
    	    return this.#private;
    	}
    }
    

    최신 Babel 프리셋은 지원되는 것 같다! (

    설치가 필요한 플러그인은 Babel 홈페이지에서 검색 → 설치

    .babelrc

    {
      "presets": ["@babel/preset-env"],
      "plugins": ["@babel/plugin-proposal-class-properties"]
    }
    
  4. 브라우저에서 모듈 로딩 테스트

    public/index.html

    <!DOCTYPE html>
    <html>
    <body>
      <script src="../dist/lib.js"></script>
      <script src="../dist/index.js"></script>
    </body>
    </html>
    

    브라우저로 열기 (짱짱맨 크롬이 아닌 익스프롤러를 사용하도록 하자!)

    Uncaught ReferenceError: exports is not defined at lib.js:3
    index.js:3 Uncaught ReferenceError: require is not defined at index.js:3
    

    브라우저의 ES6 모듈 기능을 사용하는 것은 문제 때문이다.

    Webpack을 통해 문제를 해결해보자.

    Webpack 사용하기