Gerador de Configuração Webpack

webpack.config.js
Resultados

Escrever um webpack.config.js de cabeça significa lembrar o formato exato de output, a regex test de cada loader e como os plugins se conectam. Este gerador transforma isso em um formulário curto: defina o arquivo de entrada, a pasta de saída e o modo de build, e marque as partes que você precisa: TypeScript, Babel, um loader CSS, HtmlWebpackPlugin e um servidor de desenvolvimento. Ele gera uma configuração webpack 5 limpa e pronta para copiar, com nomes de arquivo [contenthash] e output.clean já incluídos.

Como criar uma configuração webpack

  1. 1

    Defina entry e saída

    Digite o arquivo de entrada (padrão `./src/index.js`) e a pasta de saída (padrão `dist`).

  2. 2

    Escolha o modo

    Selecione `production` ou `development`. O valor é escrito direto no campo `mode`.

  3. 3

    Ative loaders e plugins

    Ative conforme a necessidade: TypeScript (`ts-loader`), Babel (`babel-loader`), um loader CSS (`style-loader` + `css-loader`), `HtmlWebpackPlugin` e um servidor de desenvolvimento.

  4. 4

    Copie a configuração

    O `webpack.config.js` é atualizado em tempo real. Use o botão de copiar e cole na raiz do seu projeto.

Saída padrão

Com os valores padrão (modo production, TypeScript, Babel, um loader CSS e HtmlWebpackPlugin), o gerador produz:

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

O que cada opção escreve

Opção O que ela adiciona à configuração
entry O valor de entry, por ex. entry: './src/index.js'.
pasta de saída output.path, resolvido com path.resolve(__dirname, 'dist').
mode mode: 'production' ou mode: 'development'.
TypeScript Uma regra ts-loader para .ts/.tsx, mais essas extensões em resolve.
Babel Uma regra babel-loader para .js/.jsx.
loader CSS Uma regra que encadeia style-loader e css-loader para .css.
HtmlWebpackPlugin A linha require mais new HtmlWebpackPlugin({ template: './src/index.html' }).
servidor de desenvolvimento Um bloco devServer que serve a pasta de saída na porta 3000 com hot reload.

Escolhas fixas na saída

Para manter a configuração inicial enxuta, alguns valores são definidos por você em vez de expostos como campos:

  • Nomes de arquivo com hash. output.filename é sempre bundle.[contenthash].js, o que invalida o cache do navegador sempre que o bundle muda.
  • Saída limpa. output.clean: true esvazia a pasta de saída a cada build, o substituto do clean-webpack-plugin no webpack 5.
  • O CSS é empacotado, não extraído. style-loader injeta os estilos via JavaScript. Para emitir um arquivo .css separado em produção, adicione MiniCssExtractPlugin você mesmo.
  • Básico do servidor de desenvolvimento. Quando ativado, devServer define static, port: 3000 e hot: true. Adicione à mão opções como historyApiFallback ou proxy se o seu app precisar.

Como ampliar

O arquivo gerado é um ponto de partida, não uma configuração de produção completa. Próximos passos comuns que você adiciona à mão: MiniCssExtractPlugin para extrair o CSS, sass-loader para .scss, os módulos asset do webpack 5 para imagens e fontes, um valor devtool para os source maps e um bloco splitChunks para dividir o código.

Perguntas frequentes

Para o webpack 5. A saída usa output.clean e nomes de arquivo [contenthash], as convenções modernas do webpack 5, então nenhum plugin de limpeza extra é necessário.

Não, ele sempre escreve um webpack.config.js em JavaScript. Ativar a opção TypeScript adiciona uma regra ts-loader para o webpack compilar seu código .ts/.tsx; isso não muda o formato do próprio arquivo de configuração.

O bloco devServer gerado usa a porta 3000 com hot reload. Altere o valor de port no arquivo copiado se precisar de outra.

Sim. Cada opção adiciona a sua própria regra (ts-loader para .tsx?, babel-loader para .jsx?), então você pode ativar uma, a outra ou ambas conforme a forma como o seu projeto transpila.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas