티스토리 뷰

반응형

5.babel-loader

ES6이상의 자바스크립트 코드는 인터넷 익스플로러 혹은 버전이 낮은 구버전 브라우저에서 지원하지 않는 경우가 있다.

이런 점을 착안하여 ES6이상의 문법을 ES5이하의 코드로 트랜스파일링하도록 하는 기능이 babel이며 이 babel을 웹팩으로 파일을 번들링할 때도 실행하게끔 해주는 것이 babel-loader다.

 

우선 npm install --save-dev babel-loader @babel/cli @babel/core @babel/preset-env 로 다운 받는다.

babel-loader: 웹팩과 바벨을 연동시키도록 해준다.

아래의 것들은 플러그인이지만 babel-loader과 같이 쓰이기 때문에 간략하게 소개하면 아래와 같다.

@babel/cli : 터미널에서 바벨 명령어를 사용할 수 있게 도와준다.

@babel/core : 바벨의 핵심 기능을 포함한다.

@babel/preset-env : es6의 문법을 es5의 문법으로 사용할 수 있게끔 es6의 문법을 트랜스파일링을 해주는 플러그인이다.

 

그 다음 프로젝트 최상위 루트에 .babelrc라는 파일을 생성하고 아래와 같이 작성한다.(js파일이 아니다.)

.babelrc은 특정 babel plugin들을 모아놓고 사용하는 설정파일이라고 할 수 있다.

 

// .babelrc

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

 

그 다음 아래와 같은 loader를 webpack.confi.js에 추가입력한다.

exclude라는 키는 바벨 대상에서 제외할 파일들이 있는 경로를 의미한다.

 

//webpack.config.js

module: {
  rules: [
    // ...
    {
      test : /\.js$/,
      include: path.resolve(__dirname,'src/main/resources/static/js'),
      exclude: /node_modules/,
      use : {
        loader: 'babel-loader'
      },
      options: {
        presets: ['@babel/preset-env']
      }
    },
    // ...
  ]
}

 

이후 웹팩을 실행시키면 트랜스파일링 및 번들링이 동시에 이루어지며 브라우저에 반영된 것을 알 수 있다.

 

P.S babel-polyfill

babel-polyfill은 추후에 다룰 플러그인이지만 babel-loader와 연계해서 사용할 필요가 있기 때문에 이 글에서 설명하고자 한다.

webpack에서 말하는 플러그인의 개념은 추후에 다룰 예정이다.

바벨과 웹팩으로 트랜스파일링 및 번들링을 한 후 브라우저에 최초 접속했을 때 해당 에러가 콘솔에 찍혔다.

 

ReferenceError: regeneratorRuntime is not defined

 

이것은 자바스크립트 ES6이상의 최신코드를 트랜스파일링을 진행해도 대체할 ES5 기능이 없기 때문에 ES5문법으로 되돌리지 못하는 경우가 있어 발생한 에러이다.

예 : promise, async,await 등등

 

다음과 같이 패키지를 설치하여 해결해보자!

npm install @babel/polyfill을 설치한다.

(중요 : babel/polyfill은 개발 환경에서만 사용하는 것이 아니라 실제 환경에서도 사용하여야 하므로 --save-dev 옵션으로 개발 설치를 하지 않도록 한다.)

이 패키지들은 오래된 브라우저에서도 ES6이상의 코드 중 ES5 코드로 대체되지 않은 것들(promise, async,await 등등)를 사용하도록 해주는 기능을 한다.

 

그 다음으로 webpack.config.js의 entry의 가장 맨 앞에 아래와 같이 코드를 추가하자!

module.exports = {
  // ...
  entry: {
    index : [
      '@babel/polyfill',
      'index.js'
    ],
  }
  // ...
}

 

이제 웹팩을 실행하면 모든 최신코드들이 구버전 브라우저에서도 실행되는 것을 알 수 있다.

반응형

'Front-End > Webpack' 카테고리의 다른 글

mode란 무엇인가?  (0) 2021.10.02
plugin란 무엇인가?  (0) 2021.10.02
자주 쓰는 loader 1(css-loader, file-loader, url-loader, expose-loader)  (0) 2021.05.18
entry와 output  (0) 2021.05.15
웹팩을 쓰는 이유?  (0) 2021.05.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함
반응형