Webpack 러닝 가이드
  • Webpack 모듈 번들러
  • Web Modules
    • Legacy 모듈 관리
    • ES 모듈 관리
  • Babel
    • Babel JavaScript 컴파일러
    • Babel 독립형 빌드
    • Babel 노드 (Node.js) ✘
    • Babel CLI 구성
    • Babel 플러그인
  • webpack
    • Webpack 개발 환경 구성
      • Webpack 설치
      • Webpack 통합
      • Webpack 구성 파일
      • Webpack 워치
      • Webpack 모드
      • Webpack 별칭 등록
      • Webpack 호환성
      • Webpack 개발 서버
      • Webpack 멀티 페이지 설정
    • Webpack 로더
      • File 로더
      • CSS 로더
      • PostCSS 로더
      • Sass 로더
      • Babel 로더
      • TypeScript 로더
    • Webpack 플러그인
      • 환경 변수 등록
      • 빌드 결과 자동 정리
      • 빌드 결과 자동 주입
      • CSS 파일 개별 추출
      • CSS 파일 크기 최적화
      • CSS 미디어쿼리 스플리팅
      • 이미지 파일 크기 최적화
  • React
    • React App 매뉴얼 구성
      • Webpack 초기 구성
      • Babel 컴파일러 구성
      • CSS 스타일 구성
      • 이미지 구성
      • 환경변수 플러그인
      • HTML 플러그인
      • 최적화 구성
      • 코드 스플리팅
      • 개발 서버
      • 이미지, 폰트 에셋 구성
      • 환경 변수 + HTML 구성
      • 빌드 최적화 구성
      • 빌드 자동 정리 구성
      • 개발 서버 구성
      • 폴리필 구성
Powered by GitBook
On this page
  • IE 웹 브라우저 대응
  • Babel + Babel Loader 구성
  • 모듈 번들링
  • Babel 플러그인
  • 참고

Was this helpful?

  1. webpack
  2. Webpack 로더

Babel 로더

PreviousSass 로더NextTypeScript 로더

Last updated 4 years ago

Was this helpful?

IE 웹 브라우저 대응

Button 컴포넌트를 작성하면서 사용된 코드는 ES6의 class 문법입니다. (사실 이 실습 파일의 모든 코드는 ES6입니다.) 안타깝게도

Babel + Babel Loader 구성

npm i @babel/core @babel/preset-env babel-loader -D
module.exports = {
  module: {
    rules: [
      // Babel 파일 로더 설정
      {
        test: /\.m?js$/i,
        exclude: /node_modules/,
        use: {
          loader:'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      }
    ]
  }
}

"exclude" 설정은 정규식과 매칭되는 디렉토리 또는 파일은 로더에 의한 번들링에서 제외됩니다.

@babel/preset-env 프리셋은 Babel Foundation이 제공하는 번들로 유용한 Babel 플러그인 모음입니다. 이 프리셋을 설정하지 않으면 ES6+ 코드를 ES5로 컴파일 하지 않게 됩니다. (ES6+ 코드는 IE 미지원)

모듈 번들링

bundle NPM 명령을 실행해 모듈을 번들링 합니다.

npm run bundle

번들링에 성공하면 브라우저 개발 도구 Sources 탭에서 ES5 코드로 컴파일된 Button 컴포넌트 코드를 볼 수 있습니다.

Babel 플러그인

플러그인 이름 그대로 ES 표준에 제안된(proposal) class 속성을 변환 처리하는 플러그인입니다.

먼저 Button 컴포넌트 class 내부에 속성 초기화 또는 정적 클래스 속성 구문을 작성해봅시다.

class Button {
  constructor(props) {
    this.props = { ...props }
  }
  
  // ES 표준에 제안된 정적 클래스 속성 구문
  static defaultProps = {
    type: 'button',
  }

  render(domNode = document.body) {
    // 속성 병합(mixins)
    const buttonNode = createElement('button', {
      ...this.defaultProps,
      ...this.props,
    })
    render(buttonNode, domNode)
  }
}

export default Button

작성된 파일을 저장하고 번들링 하면 다음과 같은 오류가 발생합니다. 오류 내용은 실험적인 문법인 classProperties를 현재 사용할 수 없다는 문구입니다.

ERROR in ./src/components/Button/index.js Module build failed (from ./node_modules/babel-loader/lib/index.js): SyntaxError: /Users/yamoo9/Documents/PROJECT/js-senior-in-ogada/meetup(offline)/week01/02-setting-webpack/src/components/Button/index.js: Support for the experimental syntax 'classProperties' isn't currently enabled (13:16):

  11 |   }
  12 |
> 13 |   defaultProps = {
     |                ^
  14 |     type: 'button',
  15 |   }
  16 |

오류를 해결하려면 @babel/plugin-proposal-class-properties를 사용할 수 있도록 설치하고 구성해야 합니다.

npm i @babel/plugin-proposal-class-properties -D
module.exports = {
  module: {
    rules: [
      {
        test: /\.m?js/i,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          presets: ['@babel/preset-env'],
          // Babel 플러그인 설정
          plugins: ['@babel/plugin-proposal-class-properties']
        }
      }
    ]
  }
}

플러그인 사용을 위한 구성이 완료되면 오류 없이 번들링이 성공적으로 수행됩니다.

webpack 5.22.0 compiled successfully in 921 ms

참고

그러므로 class, ES Modules 등 ES6+ 문법을 사용한 앱 코드는 모두 IE에서 제대로 작동하지 않습니다. IE에서도 ES6 문법을 사용하려면 를 사용해야 합니다.

, , 패키지를 프로젝트에 설치한 후, Webpack 구성 파일의 모듈 규칙 안에 로더를 설정합니다.

플러그인은 속성 초기화(Initializer) 구문으로 선언 된 속성 뿐만 아니라, 정적(Static) 클래스 속성 또한 변환(Transform) 합니다.

실습에서 설치해 사용한 플러그인 말고도 다양한 플러그인을 Babel JavaScript 컴파일러는 지원합니다. 을 참고해 사용하고자 하는 플러그인을 설치해 활용해보세요.

Babel JavaScript 컴파일러
@babel/core
@babel/preset-env
babel-loader
@babel/plugin-proposal-class-properties
Babel이 지원하는 플러그인 목록
ES6+ 코드는 IE 웹 브라우저에서 제대로 지원하지 않습니다.
babel-loader | webpackwebpack
@babel/plugin-proposal-class-properties · Babel
Logo
Logo