Webpack 的核心概念是什么?常用配置有哪些?

核心概念

概念 说明
Entry 入口文件
Output 输出配置
Loader 处理非 JS 文件(CSS、图片等)
Plugin 扩展功能(压缩、HTML 生成等)
Mode development/production
Module 一切皆模块

基本配置

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: '[name].[contenthash:8].js',
    clean: true
  },
  
  // Loader
  module: {
    rules: [
      {
        test: /.css$/,
        use: ['style-loader', 'css-loader', 'postcss-loader']
      },
      {
        test: /.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: { presets: ['@babel/preset-env'] }
        }
      },
      {
        test: /.(png|jpg|svg)$/,
        type: 'asset/resource'  // Webpack 5 内置
      }
    ]
  },
  
  // Plugin
  plugins: [
    new HtmlWebpackPlugin({ template: './index.html' })
  ],
  
  // 优化
  optimization: {
    splitChunks: {
      chunks: 'all',
      cacheGroups: {
        vendor: {
          test: /[\/]node_modules[\/]/,
          name: 'vendors',
          chunks: 'all'
        }
      }
    }
  },
  
  // 开发服务器
  devServer: {
    hot: true,
    port: 3000,
    proxy: {
      '/api': 'http://localhost:8080'
    }
  }
}

Loader 执行顺序

从右到左、从下到上:

use: ['style-loader', 'css-loader', 'postcss-loader']
// 执行顺序: postcss-loader → css-loader → style-loader

常用 Plugin

Plugin 作用
HtmlWebpackPlugin 自动生成 HTML 并引入 JS
MiniCssExtractPlugin 提取 CSS 到单独文件
CssMinimizerPlugin 压缩 CSS
DefinePlugin 定义环境变量
CopyWebpackPlugin 复制静态文件
BundleAnalyzerPlugin 分析包体积

Webpack 5 新特性

  1. 模块联邦(Module Federation):微前端
  2. 资源模块:内置图片/字体处理
  3. 缓存:持久化文件系统缓存
  4. Node Polyfill 移除:不再自动 polyfill

构建优化

// 持久化缓存
module.exports = {
  cache: {
    type: 'filesystem'
  }
}

// 代码分割
optimization: {
  splitChunks: {
    chunks: 'all'
  }
}

// Tree Shaking(生产模式自动)
// 副作用标记
// package.json: "sideEffects": false

与 Vite 对比

特性 Webpack Vite
开发启动 慢(全量打包) 快(ESM 原生)
HMR 快 极快
构建 Webpack 打包 Rollup 打包
生态 最丰富 快速增长
配置 复杂 简单

同分类其他题目