Webpack-konfigurationsgenerator

webpack.config.js
Resultat

Att skriva en webpack.config.js ur minnet innebär att komma ihåg den exakta formen på output, test-regexen för varje loader och hur pluginerna kopplas ihop. Den här generatorn gör det till ett kort formulär: ange din entry-fil, output-mapp och build-mode och bocka i de delar du behöver: TypeScript, Babel, en CSS-loader, HtmlWebpackPlugin och en dev-server. Den skriver en ren, kopieringsklar webpack 5-konfiguration med [contenthash]-filnamn och output.clean redan på plats.

Så skapar du en webpack-konfiguration

  1. 1

    Ange entry och output

    Skriv din entry-fil (standard `./src/index.js`) och output-mappen (standard `dist`).

  2. 2

    Välj mode

    Välj `production` eller `development`. Värdet skrivs rakt in i fältet `mode`.

  3. 3

    Slå på loaders och plugins

    Slå på efter behov TypeScript (`ts-loader`), Babel (`babel-loader`), en CSS-loader (`style-loader` + `css-loader`), `HtmlWebpackPlugin` och en dev-server.

  4. 4

    Kopiera konfigurationen

    `webpack.config.js` uppdateras live. Använd kopieringsknappen och klistra in den i projektets rot.

Standardutdata

Med standardvärdena (mode production, TypeScript, Babel, en CSS-loader och HtmlWebpackPlugin) skapar generatorn:

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

Vad varje alternativ skriver

Alternativ Vad det lägger till i konfigurationen
entry Värdet för entry, t.ex. entry: './src/index.js'.
output-mapp output.path, uppslaget med path.resolve(__dirname, 'dist').
mode mode: 'production' eller mode: 'development'.
TypeScript En ts-loader-regel för .ts/.tsx, plus de filändelserna i resolve.
Babel En babel-loader-regel för .js/.jsx.
CSS-loader En regel som kedjar style-loader och css-loader för .css.
HtmlWebpackPlugin require-raden plus new HtmlWebpackPlugin({ template: './src/index.html' }).
dev-server Ett devServer-block som serverar output-mappen på port 3000 med hot reload.

Fasta val i utdatan

För att hålla startkonfigurationen ren är några värden inställda åt dig i stället för att visas som fält:

  • Hashade filnamn. output.filename är alltid bundle.[contenthash].js, vilket tömmer webbläsarens cache varje gång bundlen ändras.
  • Ren output. output.clean: true tömmer output-mappen vid varje bygge, webpack 5:s ersättning för clean-webpack-plugin.
  • CSS bundlas, extraheras inte. style-loader injicerar stilarna via JavaScript. Lägg till MiniCssExtractPlugin själv för att skapa en separat .css-fil i produktion.
  • Grunderna i dev-servern. När den är på sätter devServer static, port: 3000 och hot: true. Lägg till alternativ som historyApiFallback eller proxy för hand om din app behöver dem.

Så bygger du ut den

Den genererade filen är en utgångspunkt, inte en komplett produktionsuppsättning. Vanliga nästa steg som du lägger till för hand: MiniCssExtractPlugin för extraherad CSS, sass-loader för .scss, webpack 5:s asset-moduler för bilder och typsnitt, ett devtool-värde för source maps och ett splitChunks-block för koddelning.

Vanliga frågor

För webpack 5. Utdatan använder output.clean och [contenthash]-filnamn, de moderna webpack 5-konventionerna, så ingen extra clean-plugin behövs.

Nej, den skriver alltid en webpack.config.js i JavaScript. TypeScript-alternativet lägger till en ts-loader-regel så att webpack kan kompilera din .ts/.tsx-källkod; det ändrar inte formatet på själva konfigurationsfilen.

Det genererade devServer-blocket använder port 3000 med hot reload. Ändra värdet för port i den kopierade filen om du behöver en annan.

Ja. Varje alternativ lägger till sin egen regel (ts-loader för .tsx?, babel-loader för .jsx?), så du kan slå på det ena, det andra eller båda beroende på hur ditt projekt transpilerar.

Relaterade verktyg

Verktyget finns på andra språk