Webpack-configuratiegenerator

webpack.config.js
Resultaten

Een webpack.config.js uit je hoofd schrijven betekent dat je de exacte vorm van output, de test-regex voor elke loader en de bedrading van de plugins moet onthouden. Deze generator maakt er een kort formulier van: stel je entry-bestand, uitvoermap en build-mode in en vink de onderdelen aan die je nodig hebt: TypeScript, Babel, een CSS-loader, HtmlWebpackPlugin en een dev-server. Hij levert een schone, kant-en-klare webpack 5-configuratie met [contenthash]-bestandsnamen en output.clean al ingesteld.

Zo maak je een webpack-configuratie

  1. 1

    Stel entry en uitvoer in

    Typ je entry-bestand (standaard `./src/index.js`) en de uitvoermap (standaard `dist`).

  2. 2

    Kies de mode

    Kies `production` of `development`. De waarde komt rechtstreeks in het veld `mode`.

  3. 3

    Zet loaders en plugins aan

    Zet naar behoefte TypeScript (`ts-loader`), Babel (`babel-loader`), een CSS-loader (`style-loader` + `css-loader`), `HtmlWebpackPlugin` en een dev-server aan.

  4. 4

    Kopieer de configuratie

    De `webpack.config.js` wordt live bijgewerkt. Gebruik de kopieerknop en plak hem in de root van je project.

Standaarduitvoer

Met de standaardwaarden (mode production, TypeScript, Babel, een CSS-loader en HtmlWebpackPlugin) levert de generator:

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

Wat elke optie schrijft

Optie Wat het aan de configuratie toevoegt
entry De waarde van entry, bijv. entry: './src/index.js'.
uitvoermap output.path, opgelost met path.resolve(__dirname, 'dist').
mode mode: 'production' of mode: 'development'.
TypeScript Een ts-loader-regel voor .ts/.tsx, plus die extensies in resolve.
Babel Een babel-loader-regel voor .js/.jsx.
CSS-loader Een regel die style-loader en css-loader aan elkaar koppelt voor .css.
HtmlWebpackPlugin De require-regel plus new HtmlWebpackPlugin({ template: './src/index.html' }).
dev-server Een devServer-blok dat de uitvoermap serveert op poort 3000 met hot reload.

Vaste keuzes in de uitvoer

Om de startconfiguratie schoon te houden, worden enkele waarden voor je ingesteld in plaats van als veld getoond:

  • Gehashte bestandsnamen. output.filename is altijd bundle.[contenthash].js, wat de browsercache ongeldig maakt telkens als het bundle verandert.
  • Schone uitvoer. output.clean: true leegt de uitvoermap bij elke build, de webpack 5-vervanger van clean-webpack-plugin.
  • CSS wordt gebundeld, niet geëxtraheerd. style-loader injecteert de stijlen via JavaScript. Voeg zelf MiniCssExtractPlugin toe om in productie een apart .css-bestand te maken.
  • Basis dev-server. Als hij aanstaat, stelt devServer static, port: 3000 en hot: true in. Voeg opties als historyApiFallback of proxy handmatig toe als je app die nodig heeft.

Verder uitbreiden

Het gegenereerde bestand is een startpunt, geen complete productie-opzet. Gebruikelijke vervolgstappen die je zelf toevoegt: MiniCssExtractPlugin voor geëxtraheerde CSS, sass-loader voor .scss, de asset-modules van webpack 5 voor afbeeldingen en fonts, een devtool-waarde voor source maps en een splitChunks-blok voor code splitting.

Veelgestelde vragen

Voor webpack 5. De uitvoer gebruikt output.clean en [contenthash]-bestandsnamen, de moderne conventies van webpack 5, dus is er geen extra clean-plugin nodig.

Nee, het schrijft altijd een webpack.config.js in JavaScript. De TypeScript-optie voegt een ts-loader-regel toe zodat webpack je .ts/.tsx-broncode compileert; ze verandert niets aan het formaat van het configuratiebestand zelf.

Het gegenereerde devServer-blok gebruikt poort 3000 met hot reload. Wijzig de port-waarde in het gekopieerde bestand als je een andere nodig hebt.

Ja. Elke optie voegt zijn eigen regel toe (ts-loader voor .tsx?, babel-loader voor .jsx?), dus je kunt de een, de ander of beide aanzetten, afhankelijk van hoe je project transpileert.

Gerelateerde tools

Tool beschikbaar in andere talen