Generator Konfigurasi Webpack

webpack.config.js
Hasil

Menulis webpack.config.js dari ingatan berarti mengingat bentuk persis output, regex test untuk tiap loader, dan cara plugin saling terhubung. Generator ini mengubahnya menjadi formulir singkat: atur file entry, folder output, dan mode build, lalu centang bagian yang Anda perlukan: TypeScript, Babel, loader CSS, HtmlWebpackPlugin, dan dev server. Hasilnya adalah konfigurasi webpack 5 yang bersih dan siap disalin, dengan nama file [contenthash] serta output.clean yang sudah ada.

Cara membuat konfigurasi webpack

  1. 1

    Atur entry dan output

    Ketik file entry Anda (default `./src/index.js`) dan folder output (default `dist`).

  2. 2

    Pilih mode

    Pilih `production` atau `development`. Nilainya ditulis langsung ke bidang `mode`.

  3. 3

    Aktifkan loader dan plugin

    Aktifkan sesuai kebutuhan: TypeScript (`ts-loader`), Babel (`babel-loader`), loader CSS (`style-loader` + `css-loader`), `HtmlWebpackPlugin`, dan dev server.

  4. 4

    Salin konfigurasinya

    `webpack.config.js` diperbarui secara langsung. Gunakan tombol salin dan tempel ke root proyek Anda.

Keluaran default

Dengan nilai default (mode production, TypeScript, Babel, loader CSS, dan HtmlWebpackPlugin), generator menghasilkan:

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

Apa yang ditulis setiap opsi

Opsi Yang ditambahkan ke konfigurasi
entry Nilai entry, mis. entry: './src/index.js'.
folder output output.path, diselesaikan dengan path.resolve(__dirname, 'dist').
mode mode: 'production' atau mode: 'development'.
TypeScript Aturan ts-loader untuk .ts/.tsx, plus ekstensi itu di resolve.
Babel Aturan babel-loader untuk .js/.jsx.
loader CSS Aturan yang merangkai style-loader dan css-loader untuk .css.
HtmlWebpackPlugin Baris require plus new HtmlWebpackPlugin({ template: './src/index.html' }).
dev server Blok devServer yang menyajikan folder output pada port 3000 dengan hot reload.

Pilihan yang sudah ditetapkan pada keluaran

Agar konfigurasi awal tetap ringkas, beberapa nilai ditetapkan untuk Anda alih-alih ditampilkan sebagai bidang:

  • Nama file ber-hash. output.filename selalu bundle.[contenthash].js, yang membatalkan cache browser setiap kali bundle berubah.
  • Output bersih. output.clean: true mengosongkan folder output pada setiap build, pengganti clean-webpack-plugin di webpack 5.
  • CSS di-bundle, bukan diekstrak. style-loader menyisipkan gaya melalui JavaScript. Untuk menghasilkan file .css terpisah di produksi, tambahkan sendiri MiniCssExtractPlugin.
  • Dasar dev server. Saat diaktifkan, devServer mengatur static, port: 3000, dan hot: true. Tambahkan opsi seperti historyApiFallback atau proxy secara manual jika aplikasi Anda membutuhkannya.

Cara memperluasnya

File yang dihasilkan adalah titik awal, bukan setup produksi lengkap. Langkah lanjutan yang umum Anda tambahkan sendiri: MiniCssExtractPlugin untuk mengekstrak CSS, sass-loader untuk .scss, modul asset webpack 5 untuk gambar dan font, nilai devtool untuk source map, dan blok splitChunks untuk code splitting.

Pertanyaan yang Sering Diajukan

Untuk webpack 5. Keluarannya memakai output.clean dan nama file [contenthash], konvensi modern webpack 5, sehingga tidak perlu plugin pembersih tambahan.

Tidak, selalu menulis webpack.config.js dalam JavaScript. Mengaktifkan opsi TypeScript menambahkan aturan ts-loader agar webpack mengompilasi sumber .ts/.tsx Anda; itu tidak mengubah format file konfigurasi itu sendiri.

Blok devServer yang dihasilkan memakai port 3000 dengan hot reload. Ubah nilai port di file yang disalin jika Anda perlu port lain.

Bisa. Setiap opsi menambahkan aturannya sendiri (ts-loader untuk .tsx?, babel-loader untuk .jsx?), jadi Anda bisa mengaktifkan salah satu, yang lain, atau keduanya tergantung cara proyek Anda melakukan transpilasi.

Alat Terkait

Alat ini tersedia dalam bahasa lain