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の現代的な慣習を使うため、追加のクリーンプラグインは不要です。

いいえ、常にJavaScriptのwebpack.config.jsを書き出します。TypeScriptをオンにすると、webpackが.ts/.tsxのソースをコンパイルできるようts-loaderルールが追加されます。設定ファイル自体の形式は変わりません。

生成されるdevServerブロックはポート3000でホットリロードを使います。別のポートが必要なら、コピーしたファイルでportの値を変更してください。

はい。各オプションが独自のルールを追加するため(.tsx?にはts-loader、.jsx?にはbabel-loader)、プロジェクトのトランスパイル方法に応じて片方だけ、または両方をオンにできます。

関連ツール

このツールは他の言語でも利用できます