Webpack 打包详细教程

ops/2025/3/15 20:25:06/

Webpack 是一个现代 JavaScript 应用的静态模块打包工具,它可以处理 JavaScript、CSS、图片等资源,并优化它们以提高性能。以下是 Webpack 从基础到进阶的详细教程。


1. Webpack 基础概念

Webpack 的核心概念包括:

  • Entry(入口):Webpack 开始打包的起点。
  • Output(输出):打包后的文件存放路径。
  • Loaders(加载器):转换非 JavaScript 资源(如 CSS、图片)。
  • Plugins(插件):扩展 Webpack 功能,如优化、压缩等。
  • Mode(模式)development(开发模式) 或 production(生产模式)。

2. 安装 Webpack

Webpack 需要 Node.js 环境,安装步骤如下:

# 初始化项目
npm init -y  # 安装 Webpack 及 Webpack CLI(命令行工具)
npm install webpack webpack-cli --save-dev

3. Webpack 配置文件

创建 webpack.config.js 配置文件,基本结构如下:

const path = require('path');module.exports = {mode: 'development', // 开发模式entry: './src/index.js', // 入口文件output: {filename: 'bundle.js', // 打包后文件名path: path.resolve(__dirname, 'dist') // 输出目录}
};

4. 运行 Webpack

package.json 中添加 scripts 方便运行 Webpack:

"scripts": {"build": "webpack"
}

执行命令:

npm run build

Webpack 会打包 src/index.js,生成 dist/bundle.js


5. 配置 Loaders 处理 CSS 和图片

5.1 处理 CSS

Webpack 默认只能处理 JavaScript 代码,使用 css-loaderstyle-loader 处理 CSS:

npm install css-loader style-loader --save-dev

修改 webpack.config.js

module.exports = {// 省略 entry 和 outputmodule: {rules: [{test: /\.css$/, // 处理 CSS 文件use: ['style-loader', 'css-loader']}]}
};

src/index.js 中引入 CSS:

import './styles.css';

5.2 处理图片

使用 file-loader 处理图片:

npm install file-loader --save-dev

修改 webpack.config.js

module.exports = {module: {rules: [{test: /\.(png|jpg|gif)$/,use: [{loader: 'file-loader',options: {name: '[name].[hash].[ext]',outputPath: 'images'}}]}]}
};

在 JavaScript 中引入图片:

import logo from './logo.png';
document.getElementById('app').innerHTML = `<img src="${logo}" />`;

6. 配置 Plugins 进行优化

6.1 生成 HTML 文件

使用 html-webpack-plugin 自动生成 index.html

npm install html-webpack-plugin --save-dev

修改 webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {plugins: [new HtmlWebpackPlugin({template: './src/index.html', // 使用模板filename: 'index.html'})]
};

6.2 清理旧文件

安装 clean-webpack-plugin 以清理旧的打包文件:

npm install clean-webpack-plugin --save-dev

修改 webpack.config.js

const { CleanWebpackPlugin } = require('clean-webpack-plugin');module.exports = {plugins: [new CleanWebpackPlugin()]
};

7. 开发服务器 Webpack DevServer

使用 webpack-dev-server 进行热更新:

npm install webpack-dev-server --save-dev

修改 package.json

"scripts": {"start": "webpack serve --open"
}

webpack.config.js 中添加:

module.exports = {devServer: {contentBase: './dist',hot: true}
};

运行:

npm start

8. 生产环境优化

8.1 压缩 CSS

使用 mini-css-extract-plugin

npm install mini-css-extract-plugin css-minimizer-webpack-plugin --save-dev

修改 webpack.config.js

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');module.exports = {mode: 'production',module: {rules: [{test: /\.css$/,use: [MiniCssExtractPlugin.loader, 'css-loader']}]},plugins: [new MiniCssExtractPlugin()],optimization: {minimizer: [new CssMinimizerPlugin()]}
};

8.2 代码分割

启用 splitChunks

module.exports = {optimization: {splitChunks: {chunks: 'all'}}
};

webpackconfigjs_230">9. 完整的 webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');module.exports = {mode: 'production',entry: './src/index.js',output: {filename: 'bundle.[contenthash].js',path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /\.css$/,use: [MiniCssExtractPlugin.loader, 'css-loader']},{test: /\.(png|jpg|gif)$/,use: [{loader: 'file-loader',options: {name: '[name].[hash].[ext]',outputPath: 'images'}}]}]},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({ template: './src/index.html' }),new MiniCssExtractPlugin({ filename: '[name].[contenthash].css' })],optimization: {minimizer: [new CssMinimizerPlugin()],splitChunks: {chunks: 'all'}}
};

10. 结论

通过本教程,你学会了:

  • Webpack 基础配置
  • 处理 CSS、图片等资源
  • 使用插件优化项目
  • 启用 Webpack DevServer 进行开发
  • 生产环境优化(压缩 CSS、代码分割)

掌握这些内容,你就可以高效使用 Webpack 进行前端打包了!


http://www.ppmy.cn/ops/166030.html

相关文章

基于Asp.net的医院病历管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

泽众TestOne推出快速测试用例设计,让自动化更快捷

在当今快速迭代的软件开发环境中&#xff0c;测试用例设计的效率和质量直接关系到软件交付的速度和质量。传统测试用例设计方法往往依赖于测试人员的经验&#xff0c;经验不足的测试人员可能无法识别潜在的测试场景&#xff0c;导致关键问题被遗漏。同时&#xff0c;传统方法在…

2020年蓝桥杯第十一届CC++大学B组(第一次)真题及代码

目录 1A&#xff1a;跑步训练&#xff08;填空5分_模拟&#xff09; 2B&#xff1a;纪念日&#xff08;填空5分_日期计算&#xff09; 3C&#xff1a;合并检测&#xff08;填空10分_数学&#xff09; 4D&#xff1a;REPEAT程序&#xff08;填空10分_模拟&#xff09; 5E&a…

算法随笔_73: 跳跃游戏

上一篇:算法随笔_72: 最大子数组和-CSDN博客 题目描述如下: 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#x…

泛微ecode的页面开发发送请求参数携带集合

1.在开发过程中我们难免遇见会存在需要将集合传递到后端的情况&#xff0c;那么这里就有一些如下的注意事项&#xff0c;如以下代码&#xff1a; // 新增action.boundasync addQuestion(formData) {var theList this.questionAnswerList;var questionAnswerListArray new Ar…

【C++】每日一练(链表的中间结点)

本篇博客给大家带来的是用C语言来解答找中间结点&#xff01; &#x1f41f;&#x1f41f;文章专栏&#xff1a;每日一练 &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢迎大家点赞、收藏、分享&#xff01; 今日思想&#xff1a;不服输的…

MyBatis 如何解析 XML 配置文件和 SQL 映射文件

MyBatis 使用 SAX&#xff08;Simple API for XML&#xff09;解析器来解析 XML 文件&#xff0c;SAX 是一种基于事件驱动的 XML 解析方式&#xff0c;具有高效、低内存消耗的优点。 MyBatis 主要解析两种类型的 XML 文件&#xff1a; 核心配置文件 (mybatis-config.xml): 定…

python 基于混合式推荐算法的学术论文投稿系统

基于混合式推荐算法的学术论文投稿系统是一个结合多种推荐技术&#xff08;如基于内容的推荐、协同过滤、知识图谱等&#xff09;来为研究者推荐合适期刊或会议投稿的系统。以下是实现该系统的关键步骤和Python代码示例。 系统设计思路 1. 数据收集与预处理&#xff1a; - 收…