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
},
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'
}
]
},
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']
常用 Plugin
| Plugin |
作用 |
| HtmlWebpackPlugin |
自动生成 HTML 并引入 JS |
| MiniCssExtractPlugin |
提取 CSS 到单独文件 |
| CssMinimizerPlugin |
压缩 CSS |
| DefinePlugin |
定义环境变量 |
| CopyWebpackPlugin |
复制静态文件 |
| BundleAnalyzerPlugin |
分析包体积 |
Webpack 5 新特性
- 模块联邦(Module Federation):微前端
- 资源模块:内置图片/字体处理
- 缓存:持久化文件系统缓存
- Node Polyfill 移除:不再自动 polyfill
构建优化
module.exports = {
cache: {
type: 'filesystem'
}
}
optimization: {
splitChunks: {
chunks: 'all'
}
}
与 Vite 对比
| 特性 |
Webpack |
Vite |
| 开发启动 |
慢(全量打包) |
快(ESM 原生) |
| HMR |
快 |
极快 |
| 构建 |
Webpack 打包 |
Rollup 打包 |
| 生态 |
最丰富 |
快速增长 |
| 配置 |
复杂 |
简单 |
同分类其他题目