Webpack 설정 생성기

webpack.config.js
결과

webpack.config.js를 기억에 의존해 쓰려면 output의 정확한 형태, 각 로더의 test 정규식, 플러그인이 연결되는 방식을 떠올려야 합니다. 이 생성기는 그것을 짧은 폼으로 바꿉니다. 엔트리 파일, 출력 폴더, 빌드 모드를 설정한 뒤 필요한 부분, 즉 TypeScript, Babel, CSS 로더, HtmlWebpackPlugin, 개발 서버를 체크하세요. [contenthash] 파일 이름과 output.clean이 이미 들어간, 복사해서 바로 쓰는 깔끔한 webpack 5 설정을 만들어 냅니다.

webpack 설정을 만드는 법

  1. 1

    entry와 출력 설정

    엔트리 파일(기본값 `./src/index.js`)과 출력 폴더(기본값 `dist`)를 입력하세요.

  2. 2

    모드 선택

    `production` 또는 `development`를 고르세요. 값은 곧바로 `mode` 필드에 기록됩니다.

  3. 3

    로더와 플러그인 켜기

    필요에 따라 TypeScript(`ts-loader`), Babel(`babel-loader`), CSS 로더(`style-loader` + `css-loader`), `HtmlWebpackPlugin`, 개발 서버를 켜세요.

  4. 4

    설정 복사

    `webpack.config.js`가 실시간으로 갱신됩니다. 복사 버튼을 눌러 프로젝트 루트에 붙여넣으세요.

기본 출력

기본값(production 모드, TypeScript, Babel, CSS 로더, HtmlWebpackPlugin)에서 생성기는 다음을 만듭니다.

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode: 'production',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.[contenthash].js',
    clean: true,
  },
  resolve: { extensions: ['.ts','.tsx','.js'] },
  module: {
    rules: [
      { test: /\.tsx?$/, use: 'ts-loader', exclude: /node_modules/ },
      { test: /\.jsx?$/, exclude: /node_modules/, use: 'babel-loader' },
      { test: /\.css$/, use: ['style-loader', 'css-loader'] },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({ template: './src/index.html' }),
  ],
};

각 옵션이 쓰는 것

옵션 설정에 추가되는 내용
entry entry 값, 예: entry: './src/index.js'.
출력 폴더 output.path, path.resolve(__dirname, 'dist')로 해석됩니다.
mode mode: 'production' 또는 mode: 'development'.
TypeScript .ts/.tsx용 ts-loader 규칙과 그 확장자를 resolve에 추가합니다.
Babel .js/.jsx용 babel-loader 규칙.
CSS 로더 .css용으로 style-loader와 css-loader를 연결하는 규칙.
HtmlWebpackPlugin require 줄과 new HtmlWebpackPlugin({ template: './src/index.html' }).
개발 서버 출력 폴더를 3000 포트에서 핫 리로드로 제공하는 devServer 블록.

출력에서 고정된 선택

스타터 설정을 깔끔하게 유지하기 위해 일부 값은 필드로 노출하지 않고 대신 정해 둡니다.

  • 해시된 파일 이름. output.filename은 항상 bundle.[contenthash].js이며, 번들이 바뀔 때마다 브라우저 캐시를 무효화합니다.
  • 깨끗한 출력. output.clean: true는 빌드마다 출력 폴더를 비웁니다. webpack 5에서 clean-webpack-plugin을 대체합니다.
  • CSS는 번들에 포함되고 추출되지 않습니다. style-loader는 JavaScript로 스타일을 주입합니다. 프로덕션에서 별도의 .css 파일을 만들려면 MiniCssExtractPlugin을 직접 추가하세요.
  • 개발 서버 기본. 켜면 devServer가 static, port: 3000, hot: true를 설정합니다. 앱에 필요하면 historyApiFallback이나 proxy 같은 옵션을 직접 추가하세요.

더 확장하기

생성된 파일은 출발점이지 완전한 프로덕션 설정이 아닙니다. 직접 추가하는 흔한 다음 단계는 추출한 CSS를 위한 MiniCssExtractPlugin, .scss를 위한 sass-loader, 이미지와 폰트를 위한 webpack 5 asset 모듈, 소스맵을 위한 devtool 값, 코드 분할을 위한 splitChunks 블록입니다.

자주 묻는 질문

webpack 5용입니다. 출력이 output.clean과 [contenthash] 파일 이름, 즉 현대적인 webpack 5 관례를 사용하므로 별도의 clean 플러그인이 필요 없습니다.

아니요, 항상 JavaScript로 webpack.config.js를 씁니다. TypeScript 옵션을 켜면 webpack이 .ts/.tsx 소스를 컴파일하도록 ts-loader 규칙이 추가됩니다. 설정 파일 자체의 형식은 바뀌지 않습니다.

생성된 devServer 블록은 3000 포트를 핫 리로드와 함께 사용합니다. 다른 포트가 필요하면 복사한 파일에서 port 값을 바꾸세요.

네. 각 옵션이 자체 규칙을 추가하므로(.tsx?는 ts-loader, .jsx?는 babel-loader), 프로젝트가 트랜스파일하는 방식에 따라 하나, 다른 하나, 또는 둘 다 켤 수 있습니다.

관련 도구

이 도구는 다른 언어로도 제공됩니다