Webpack
Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它能够将各种静态资源(如 JavaScript、CSS、图像等)视为模块,并生成优化过的代码。
以下是对 Webpack 的详细教程,包括图表、注释和相关案例。
1. Webpack 基本概念
1.1. Entry(入口)
入口是 Webpack 构建内部依赖图的起点。可以指定一个或多个入口文件。
module.exports = {
entry: './src/index.js', // 单入口
// 多入口
// entry: {
// app: './src/app.js',
// admin: './src/admin.js'
// }
};
1.2. Output(输出)
输出属性告诉 Webpack 在哪里输出它所创建的 bundles 以及如何命名这些文件。
const path = require('path');
module.exports = {
output: {
filename: 'bundle.js', // 输出文件名
path: path.resolve(__dirname, 'dist') // 输出路径
}
};
1.3. Loaders(加载器)
加载器让 Webpack 能够处理那些非 JavaScript 文件。常见的加载器有 css-loader、style-loader、file-loader 等。
module.exports = {
module: {
rules: [
{
test: /\.css$/, // 匹配所有的 .css 文件
use: ['style-loader', 'css-loader'] // 使用这两个 loader 处理 CSS 文件
},
{
test: /\.(png|svg|jpg|jpeg|gif)$/i, // 匹配图片文件
type: 'asset/resource' // 使用资源模块处理图片
}
]
}
};
1.4. Plugins(插件)
插件用于执行范围更广的任务,包括打包优化、资源管理和环境变量注入等。
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
plugins: [
new HtmlWebpackPlugin({
title: 'Webpack Example', // 设置生成的 HTML 文件的标题
template: './src/index.html' // 指定模板文件
})
]
};
1.5. Mode(模式)
Webpack 4 引入了 mode 配置选项,允许用户指定当前构建的模式(development、production 或 none)。
module.exports = {
mode: 'development', // 开发模式
// mode: 'production' // 生产模式
};
2. Webpack 配置示例
以下是一个完整的 Webpack 配置文件示例:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource'
}
]
},
plugins: [
new HtmlWebpackPlugin({
title: 'Webpack Example',
template: './src/index.html'
})
],
mode: 'development'
};
3. 依赖关系图
Webpack 会递归地构建一个依赖关系图(Dependency Graph),如下图所示:
graph TD;
A[入口文件 index.js] --> B[模块1 module1.js];
A --> C[模块2 module2.js];
B --> D[模块3 module3.js];
C --> E[模块4 module4.js];
4. 案例分析
4.1. 案例 1:简单的 JavaScript 打包
4.2. 项目结构
project
├── dist
│ └── index.html
├── src
│ ├── index.js
│ └── module.js
├── package.json
└── webpack.config.js
4.3. 代码示例
src/index.js:
import { greet } from './module.js';
greet('Webpack');
src/module.js:
export function greet(name) {
console.log(`Hello, ${name}!`);
}
dist/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Webpack Example</title>
</head>
<body>
<script src="bundle.js"></script>
</body>
</html>
webpack.config.js:使用上文「Webpack 配置示例」中的完整配置即可。
4.4. 运行 Webpack
先安装依赖,然后在项目根目录下运行打包命令:
npm install --save-dev webpack webpack-cli html-webpack-plugin
npx webpack
生成的 dist/bundle.js 文件将包含所有模块的代码,并可以在浏览器中运行。
5. 可视化工具
使用 Webpack Bundle Analyzer 可以生成一个图表,帮助可视化了解项目的依赖关系、模块大小及耗时等。
npm install --save-dev webpack-bundle-analyzer
在 Webpack 配置文件中添加插件:
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
module.exports = {
// 其他配置
plugins: [
new BundleAnalyzerPlugin()
]
};
运行 Webpack 后,将生成一个可视化报告,帮助分析打包性能瓶颈。