Webpack 内容总结与示例
一、核心概念
-
入口(Entry)
- 指定打包的起点,Webpack 从这里开始构建依赖图。
- 示例:
entry: './src/index.js'
-
输出(Output)
- 定义打包后文件的输出位置和命名规则。
- 示例:
output: {path: path.resolve(__dirname, 'dist'),filename: 'bundle.js' }
-
加载器(Loaders)
- 处理非 JavaScript 文件(如 CSS、图片),需在
module.rules
中配置。 - 示例:使用 Babel 转换 ES6+ 语法:
module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: 'babel-loader'}] }
- 处理非 JavaScript 文件(如 CSS、图片),需在
-
插件(Plugins)
- 扩展 Webpack 功能(如生成 HTML 模板、提取 CSS)。
- 示例:自动生成
index.html
:const HtmlWebpackPlugin = require('html-webpack-plugin'); plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })];
-
模式(Mode)
- 设置开发或生产环境,默认启用对应优化。
- 示例:
mode: 'development'
二、完整配置示例
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {entry: './src/index.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'bundle.[contenthash].js'},mode: 'production',module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: 'babel-loader'},{test: /\.css$/,use: [MiniCssExtractPlugin.loader, 'css-loader'] // 提取 CSS 到单独文件},{test: /\.(png|svg|jpg)$/,type: 'asset/resource', // Webpack 5 内置处理资源文件generator: {filename: 'images/[hash][ext]' // 输出到 images 目录}}]},plugins: [new HtmlWebpackPlugin({ template: './src/index.html' }),new MiniCssExtractPlugin({ filename: 'styles.[contenthash].css' })],devServer: {static: './dist',hot: true,port: 3000}
};
三、典型场景示例
-
处理 JavaScript(Babel 转换)
- 安装依赖:
npm install babel-loader @babel/core @babel/preset-env
- 创建
.babelrc
文件:{ "presets": ["@babel/preset-env"] }
- 安装依赖:
-
处理 CSS 与预处理器(Sass)
- 安装依赖:
npm install sass sass-loader css-loader mini-css-extract-plugin
- 修改
module.rules
:{test: /\.scss$/,use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'] }
- 安装依赖:
-
图片与字体处理(Webpack 5 资源模块)
- 无需额外 Loader,直接配置:
{test: /\.(png|svg|woff2)$/,type: 'asset/resource',generator: { filename: 'assets/[hash][ext]' } }
- 无需额外 Loader,直接配置:
-
开发服务器与热更新
- 安装依赖:
npm install webpack-dev-server
- 运行命令:
npx webpack serve --open
- 安装依赖:
四、常见问题与解决
-
路径错误
- 使用
path.resolve(__dirname, '路径')
确保绝对路径。
- 使用
-
Loader 顺序问题
- Loader 从右到左执行,例如:
['style-loader', 'css-loader']
会先执行css-loader
。
- Loader 从右到左执行,例如:
-
缓存失效
- 在文件名中添加
[contenthash]
(如bundle.[contenthash].js
)。
- 在文件名中添加
-
生产环境优化
- 使用
TerserWebpackPlugin
压缩 JS,CssMinimizerPlugin
压缩 CSS。
- 使用
五、总结
Webpack 通过入口→加载器→插件→输出的流程,将分散的模块打包为优化的静态资源。合理配置 Loader 处理各类文件,利用插件扩展功能,并通过 mode
区分环境,可显著提升开发效率与应用性能。