Published on

webpack 사용

webpack을 사용하는 이유

  • 하나의 파일로 js를 쉽게 번들할 수 있다.
  • FE코드에 npm 패키지를 사용할 수 있다.
  • babel을 이용하여 ES6/ES7 코드를 작성할 수 있다. 쉽게
  • 코드를 압축 또는 최적화 할 수 있다.
  • HMR(Hot module Replacement)을 사용할 수 있다.
  • JS로 모든 유형의 파일을 포함할 수 있다. (require)
  • 그 밖의 수 많은 기능들?

왜 이런 기능이 필요?

  • js파일번들 - 자바스크립트를 모듈로 작성. 각각의 파일에 대해 script 태그를 별도로 작성할 필요가 없다.
  • npm패키지 사용 - 오픈소스 코드의 커다란 생태계인 npm코드를 require하여 가져다 쓸 수 있다.
  • HMR사용 - 코드저장할때마다 리프레시 자동으로 된다.
  • JS로 모든 유형의 파일을 포함 - 추가적인 빌드도구의 수를 줄일 수 있고, 프로그램적으로 파일을 사용 및 수정할 수 있다.
  • ES6/ES7, LESS, SCSS - 쉽게 사용할 수 있다. (babel, scss 로더만 추가해주면)

webpack.config.js에 설정

  • entry는 진입점 js파일을 지정해준다. main과 같은 존재. 이 안에서 require로 필요한 모듈을 포함한다.
  • output은 bundle파일 생성을 정의
  • HMR plugin을 사용하여 자동으로 리프레시되도록 해준다.
  • HtmlWebpackPlugin을 통하여 dist에 생성할 html의 내용이 되는 html 파일을 지정 (안의 bundle.js를 포함하는 스크립트 태그는 자동으로 들어갈 것이다.)
  • module.loaders 에 로더를 포함시켜줘야 원하는 파일유형을 js에서 require할 수 있다. (include는 해당 경로에 있는 파일에만 해당 로더를 적용)
  • devServer는 개발서버를 돌리는데 필요한 정의
// webpack.config.dev.js
var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  devtool: 'cheap-eval-source-map',
  entry: ['./src/index'],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new HtmlWebpackPlugin({
      template: './src/index.html',
    }),
  ],
  module: {
    loaders: [
      {
        test: /\.css$/,
        loaders: ['style-loader', 'css-loader'],
      },
      {
        test: /\.js$/,
        loaders: ['babel-loader'],
        include: path.join(__dirname, 'src'),
      },
    ],
  },
  devServer: {
    contentBase: './dist',
    hot: true,
  },
};

느낀점

  • 그동안 사용했던 gulp나 grunt에 비해 코드의 최적화, 번들을 훨씬 쉽게 할 수 있고,
  • ES6/ES7, LESS, SCSS를 사용하는데 있어서도, 간단히 로더만 설치하고 포함해주면 되어 사용하는데 더욱 편리함을 느꼈다.
  • commonJS를 지원하여 js를 모듈화하고, 여러 형태의 파일을 js에서 포함할 수 있는 것 또한 매력적이다.

참조