📦 Webpack 5 基础配置详解
📑 目录
🎯 webpack概念与核心功能
Webpack 是现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图,然后将项目中所需的每一个模块组合成一个或多个 bundles。
核心概念
- Entry: 入口起点,指示 webpack 应该使用哪个模块来作为构建其内部依赖图的开始
- Output: 输出结果,告诉 webpack 在哪里输出它所创建的 bundle
- Loader: 让 webpack 能够去处理其他类型的文件,并将它们转换为有效模块
- Plugin: 插件则可以用于执行范围更广的任务,从打包优化到资源管理
- Mode: 模式配置(development/production),启用相应模式下的优化
🛠 项目初始化配置
1. 创建项目并初始化
bash
mkdir webpack-demo
cd webpack-demo
npm init -y
2. 安装webpack相关依赖
bash
npm install webpack webpack-cli --save-dev
3. 基础配置文件
js
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
clean: true, // webpack 5 内置清理功能
},
mode: 'development'
};
📦 加载器(Loader)配置
CSS处理
bash
npm install css-loader style-loader postcss-loader postcss postcss-preset-env --save-dev
js
module.exports = {
// ...
module: {
rules: [
{
test: /\.css$/i,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [
'postcss-preset-env',
],
},
},
},
],
},
],
},
};
资源模块处理
Webpack 5 内置了资源模块(Asset Modules),无需额外的 loader:
js
module.exports = {
// ...
module: {
rules: [
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 4 * 1024 // 4kb
}
},
generator: {
filename: 'images/[hash][ext][query]'
}
},
],
},
};
🔌 插件(Plugin)配置
HTML生成插件
bash
npm install html-webpack-plugin --save-dev
js
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
// ...
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html',
title: 'Webpack App'
}),
],
};
CSS提取插件
bash
npm install mini-css-extract-plugin --save-dev
js
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
// ...
plugins: [
new MiniCssExtractPlugin({
filename: 'css/[name].[contenthash].css'
}),
],
module: {
rules: [
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, 'css-loader'],
},
],
},
};
🚀 开发服务器配置
bash
npm install webpack-dev-server --save-dev
js
module.exports = {
// ...
devServer: {
static: './dist',
hot: true,
open: true,
port: 8080,
compress: true,
},
};
📚 多页面打包配置
js
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
home: './src/pages/home/index.js',
about: './src/pages/about/index.js',
},
output: {
filename: '[name].[contenthash].js',
path: path.resolve(__dirname, 'dist'),
},
plugins: [
new HtmlWebpackPlugin({
template: './src/pages/home/index.html',
filename: 'home.html',
chunks: ['home'],
}),
new HtmlWebpackPlugin({
template: './src/pages/about/index.html',
filename: 'about.html',
chunks: ['about'],
}),
],
};
🚀 性能优化建议
1. 开启缓存
js
module.exports = {
// ...
cache: {
type: 'filesystem',
},
};
2. 代码分割
js
module.exports = {
// ...
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chunks: 'all',
},
},
},
},
};
3. Tree Shaking
js
module.exports = {
mode: 'production', // 生产模式自动启用
optimization: {
usedExports: true,
},
};
📝 注意事项
- 确保 Node.js 版本 >= 14.0.0
- webpack 5 对 package.json 中的
type: "module"
支持更好 - 开发环境建议使用 source map 便于调试
- 生产环境注意开启代码压缩和优化选项
🎉 总结
本文介绍了 Webpack 5 的基础配置,包括:
- 基本概念和核心功能
- loader 和 plugin 的配置
- 开发服务器设置
- 多页面应用配置
- 性能优化方案
💡 提示: webpack 5 的配置比之前版本更加简洁,内置了许多原本需要第三方插件才能实现的功能。建议经常查看官方文档获取最新特性。