Generator konfiguracji webpack

webpack.config.js
Wyniki

Pisanie webpack.config.js z pamięci oznacza przypominanie sobie dokładnego kształtu output, wyrażenia test dla każdego loadera i tego, jak łączą się wtyczki. Ten generator zamienia to w krótki formularz: ustaw plik wejściowy, folder wyjściowy i tryb budowania, a potem zaznacz potrzebne elementy: TypeScript, Babel, loader CSS, HtmlWebpackPlugin i serwer deweloperski. Tworzy czystą, gotową do skopiowania konfigurację webpacka 5 z nazwami plików [contenthash] i już ustawionym output.clean.

Jak utworzyć konfigurację webpack

  1. 1

    Ustaw entry i wyjście

    Wpisz plik wejściowy (domyślnie `./src/index.js`) i folder wyjściowy (domyślnie `dist`).

  2. 2

    Wybierz tryb

    Wybierz `production` lub `development`. Wartość trafia wprost do pola `mode`.

  3. 3

    Włącz loadery i wtyczki

    Włącz według potrzeb TypeScript (`ts-loader`), Babel (`babel-loader`), loader CSS (`style-loader` + `css-loader`), `HtmlWebpackPlugin` i serwer deweloperski.

  4. 4

    Skopiuj konfigurację

    Plik `webpack.config.js` aktualizuje się na żywo. Użyj przycisku kopiowania i wklej go do katalogu głównego projektu.

Wyjście domyślne

Przy ustawieniach domyślnych (tryb production, TypeScript, Babel, loader CSS i HtmlWebpackPlugin) generator tworzy:

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' }),
  ],
};

Co zapisuje każda opcja

Opcja Co dodaje do konfiguracji
entry Wartość entry, np. entry: './src/index.js'.
folder wyjściowy output.path, rozwiązany przez path.resolve(__dirname, 'dist').
mode mode: 'production' lub mode: 'development'.
TypeScript Regułę ts-loader dla .ts/.tsx oraz te rozszerzenia w resolve.
Babel Regułę babel-loader dla .js/.jsx.
loader CSS Regułę łączącą style-loader i css-loader dla .css.
HtmlWebpackPlugin Wiersz require oraz new HtmlWebpackPlugin({ template: './src/index.html' }).
serwer deweloperski Blok devServer serwujący folder wyjściowy na porcie 3000 z przeładowaniem na gorąco.

Stałe wybory w wyjściu

Aby konfiguracja startowa była zwięzła, kilka wartości jest ustawianych za ciebie, zamiast być udostępnianych jako pola:

  • Nazwy plików z haszem. output.filename to zawsze bundle.[contenthash].js, co unieważnia pamięć podręczną przeglądarki za każdym razem, gdy bundle się zmienia.
  • Czyste wyjście. output.clean: true opróżnia folder wyjściowy przy każdym buildzie, to zamiennik clean-webpack-plugin w webpacku 5.
  • CSS jest dołączany do bundle’a, nie wyodrębniany. style-loader wstrzykuje style przez JavaScript. Aby w produkcji utworzyć osobny plik .css, dodaj MiniCssExtractPlugin samodzielnie.
  • Podstawy serwera deweloperskiego. Po włączeniu devServer ustawia static, port: 3000 i hot: true. Opcje takie jak historyApiFallback czy proxy dodaj ręcznie, jeśli aplikacja ich potrzebuje.

Jak to rozbudować

Wygenerowany plik to punkt wyjścia, a nie kompletna konfiguracja produkcyjna. Typowe kolejne kroki, które dodajesz ręcznie: MiniCssExtractPlugin do wyodrębniania CSS, sass-loader dla .scss, moduły asset webpacka 5 dla obrazów i czcionek, wartość devtool dla source map oraz blok splitChunks do dzielenia kodu.

Najczęściej zadawane pytania

Dla webpacka 5. Wyjście używa output.clean i nazw plików [contenthash], czyli nowoczesnych konwencji webpacka 5, więc żadna dodatkowa wtyczka czyszcząca nie jest potrzebna.

Nie, zawsze zapisuje webpack.config.js w JavaScript. Włączenie opcji TypeScript dodaje regułę ts-loader, aby webpack kompilował twój kod .ts/.tsx; nie zmienia to formatu samego pliku konfiguracyjnego.

Wygenerowany blok devServer używa portu 3000 z przeładowaniem na gorąco. Zmień wartość port w skopiowanym pliku, jeśli potrzebujesz innego.

Tak. Każda opcja dodaje własną regułę (ts-loader dla .tsx?, babel-loader dla .jsx?), więc możesz włączyć jedną, drugą albo obie, zależnie od tego, jak twój projekt transpiluje kod.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach