Trình tạo cấu hình webpack

webpack.config.js
Kết quả

Viết webpack.config.js từ trí nhớ nghĩa là phải nhớ hình dạng chính xác của output, biểu thức test cho từng loader và cách các plugin nối với nhau. Công cụ này biến việc đó thành một biểu mẫu ngắn: đặt tệp đầu vào, thư mục output và chế độ build, rồi tích các phần bạn cần, gồm TypeScript, Babel, một CSS loader, HtmlWebpackPlugin và một dev server. Nó viết ra một cấu hình webpack 5 gọn gàng, sẵn sàng để sao chép, với tên tệp [contenthash] và output.clean đã có sẵn.

Cách tạo cấu hình webpack

  1. 1

    Đặt entry và output

    Nhập tệp đầu vào (mặc định `./src/index.js`) và thư mục output (mặc định `dist`).

  2. 2

    Chọn mode

    Chọn `production` hoặc `development`. Giá trị được ghi thẳng vào trường `mode`.

  3. 3

    Bật loader và plugin

    Bật theo nhu cầu: TypeScript (`ts-loader`), Babel (`babel-loader`), một CSS loader (`style-loader` + `css-loader`), `HtmlWebpackPlugin` và một dev server.

  4. 4

    Sao chép cấu hình

    `webpack.config.js` cập nhật theo thời gian thực. Dùng nút sao chép và dán vào thư mục gốc của dự án.

Kết quả mặc định

Với các giá trị mặc định (chế độ production, TypeScript, Babel, một CSS loader và HtmlWebpackPlugin), công cụ tạo ra:

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

Mỗi tùy chọn viết gì

Tùy chọn Nó thêm gì vào cấu hình
entry Giá trị entry, ví dụ entry: './src/index.js'.
thư mục output output.path, được giải bằng path.resolve(__dirname, 'dist').
mode mode: 'production' hoặc mode: 'development'.
TypeScript Một quy tắc ts-loader cho .ts/.tsx, cùng các đuôi đó trong resolve.
Babel Một quy tắc babel-loader cho .js/.jsx.
CSS loader Một quy tắc nối style-loader và css-loader cho .css.
HtmlWebpackPlugin Dòng require cùng new HtmlWebpackPlugin({ template: './src/index.html' }).
dev server Một khối devServer phục vụ thư mục output trên cổng 3000 với hot reload.

Các lựa chọn cố định trong kết quả

Để giữ cấu hình khởi đầu gọn gàng, một vài giá trị được đặt sẵn cho bạn thay vì hiện thành trường:

  • Tên tệp có hash. output.filename luôn là bundle.[contenthash].js, giúp xóa cache trình duyệt mỗi khi bundle thay đổi.
  • Output sạch. output.clean: true dọn sạch thư mục output ở mỗi lần build, phần thay thế cho clean-webpack-plugin trong webpack 5.
  • CSS được gộp vào bundle, không tách riêng. style-loader chèn kiểu qua JavaScript. Để xuất một tệp .css riêng cho production, hãy tự thêm MiniCssExtractPlugin.
  • Cơ bản của dev server. Khi bật, devServer đặt static, port: 3000 và hot: true. Thêm các tùy chọn như historyApiFallback hoặc proxy thủ công nếu ứng dụng cần.

Mở rộng thêm

Tệp được tạo ra là điểm khởi đầu, không phải một cấu hình production hoàn chỉnh. Các bước tiếp theo thường gặp mà bạn tự thêm: MiniCssExtractPlugin để tách CSS, sass-loader cho .scss, các mô-đun asset của webpack 5 cho ảnh và phông chữ, một giá trị devtool cho source map, và một khối splitChunks để chia tách mã.

Câu hỏi thường gặp

Cho webpack 5. Kết quả dùng output.clean và tên tệp [contenthash], là các quy ước hiện đại của webpack 5, nên không cần plugin dọn dẹp nào thêm.

Không, nó luôn viết một webpack.config.js bằng JavaScript. Bật tùy chọn TypeScript sẽ thêm một quy tắc ts-loader để webpack biên dịch mã nguồn .ts/.tsx của bạn; nó không thay đổi định dạng của chính tệp cấu hình.

Khối devServer được tạo dùng cổng 3000 với hot reload. Đổi giá trị port trong tệp đã sao chép nếu bạn cần cổng khác.

Có. Mỗi tùy chọn thêm quy tắc riêng (ts-loader cho .tsx?, babel-loader cho .jsx?), nên bạn có thể bật cái này, cái kia hoặc cả hai tùy theo cách dự án của bạn biên dịch chéo.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác