Webpack 打包详细教程
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-loader 和 style-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'}}
};
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 进行前端打包了!
相关文章:
Webpack 打包详细教程
Webpack 是一个现代 JavaScript 应用的静态模块打包工具,它可以处理 JavaScript、CSS、图片等资源,并优化它们以提高性能。以下是 Webpack 从基础到进阶的详细教程。 1. Webpack 基础概念 Webpack 的核心概念包括: Entry(入口&a…...
每日一题----------集合
数组: (1)长度开始必须指定,而且一但指定,不能修改。 (2)保存的必须为同一类型的元素。 (3)使用数组进行增加元素的代码--比较麻烦。 如果要添加数据则需要ÿ…...
滑动窗⼝(同向双指针)---最⼤连续1的个数III
题目链接 给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。 示例 1: 输入:nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出:6 解释:[1,1,1,0,0,…...
《几何原本》命题I.30
《几何原本》命题I.30 平行于同一直线的两条直线互相平行。 设 l 1 ∥ l 2 , l 1 ∥ l 3 l_1\parallel l_2,l_1\parallel l_3 l1∥l2,l1∥l3 则 ∠ 1 ∠ 2 , ∠ 1 ∠ 3 \angle 1\angle 2,\angle 1\angle 3 ∠1∠2,∠1∠3 则 ∠ 2 ∠ 3 \angle 2\angle 3 ∠2∠3…...
蓝桥杯 k倍区间
题目描述 给定一个长度为 NN 的数列,A1,A2,⋯ANA1,A2,⋯AN,如果其中一段连续的子序列 Ai,Ai1,⋯AjAi,Ai1,⋯Aj ( i≤ji≤j ) 之和是 KK 的倍数,我们就称这个区间 [i,j][i,j] 是 K 倍区间。 你能求出数列中总共有多少个 KK 倍区间…...
dify-SQL查询
第1节 DIFY 编排流程 1.1 步骤 1.开始:用户输入分析需求 2.LLM-SQL 专家:大模型根据用户输入需求生成 SQL 查询 3.SQL查询:执行查询并获取数据 4.结束:输出查询结果集 1.2 工作流 第2节 组件配置 2.1 开始 新建一个开始组件&am…...
【制作PPT的AI工具】
制作PPT的AI工具: 1. Gamma: 特点: 无需下载,支持网页、移动端及iPad使用。提供多种模板和主题,支持一键生成PPT大纲、排版和配图。优点: 操作简单,适合快速制作演示文稿。 2. Beautiful.ai&…...
贪心算法精解:用C++征服最优解问题
贪心算法精解:用C征服最优解问题 一、贪心算法的本质:当下最优即全局最优 贪心算法如同下棋高手,每一步都选择当前最优的走法。它的核心思想是:通过局部最优选择的叠加,最终得到全局最优解。这种算法在时间复杂度上往…...
《程序员的自我修养—链接、装载与库》-- 对书中常见段的讲解总结
1. 核心段的作用与特点 (1) .text 段(代码段) 内容:存放程序的可执行指令(机器码),例如函数的实现代码。特点: 通常是只读的(防止程序意外修改指令)。在程序运行前已确…...
一文了解汽车图像传感器
2024年底,安森美做了题为"How Automotive Image Sensors Transform the Future of Autonomous Driving"的演讲,这里结合其内容对自动驾驶图像传感器做一个介绍。 当前的自动驾驶感知技术主要有两大技术路线:一种是仅使用摄像头作为传感器进行信息采集的纯…...
2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距
一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增,IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下,传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示,采用混合架构的企业数据运营效…...
AI科技公司招聘一位后端开发工程师
招聘岗位:后端开发工程师(兼运维) 公司名称:深圳市格子科技有限公司 公司介绍:深圳市格子科技有限公司作为AI应用创新先锋,构建起以AI工具研发为核心、短剧平台运营为延伸的多业务发展模式。公司自主研发A…...
ubuntu软件
视频软件,大部分的编码都能适应 sudo apt install vlc图片软件 sudo apt install gwenview截图软件 sudo apt install flameshot设置快捷键 flameshot flameshot gui -p /home/cyun/Pictures/flameshot也就是把它保存到一个自定义的路径 菜单更换 sudo apt r…...
《面向对象程序设计-C++》实验一 熟悉Visual C++开发环境及上机过程
一、实验目的 了解和使用VC集成开发环境;熟悉VC环境的基本命令和功能键;熟悉常用的功能菜单命令;学习使用VC环境的帮助;学习完整的C程序开发过程;理解简单的C程序结构。 二、实验内容 使用Visual C 6.0集成环境来编…...
《2025年软件测试工程师面试》MySQL面试题
1、什么是数据库事务? 数据库事务: 是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 2、Mysql事务的四大特性是什么? 原子性: 事务作为一个整体被执行,包含在其中的对数据…...
Java的 JDBC 编程
1. Java的数据库编程:JDBC JDBC:Java 通过JDBC这样的技术来操作 MySQL MySQL 是一个基于 C/C 实现的数据库。 本身也提供了一系列的 API (Application Progromming Interface),让程序员调用,从而通过代码来…...
Java中的分布式锁:原理、实现与最佳实践
引言 在分布式系统中,多个服务实例或进程需要协调对共享资源的访问。例如,电商系统中库存扣减、金融交易中的余额操作等场景,都需要保证同一时刻只有一个客户端能执行关键操作。**分布式锁(Distributed Lock)**正是解…...
开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器
开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器 目录 开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器本项目未经授权,禁止商用!本项目未经授权,禁止商用!本项目未经授权&…...
深入剖析 Windows 崩溃:从 explorerframe.dll 到 Mwt.exe 的侦探之旅
抱歉复制后格式出现问题,可能是因为 Markdown 或纯文本在不同平台间的换行和缩进处理不一致。我重新整理了一份格式清晰的版本,确保在复制到博客平台(如 WordPress、Medium)或文本编辑器时更容易调整。以下是优化后的 Markdown 版…...
如何将ipynb文件转换为pdf文件
事情起因: 基本我所有的code以及代码注释,以及出图说明都统一放在jupyter notebook中, 代码注释,或者文档说明,实际上就是markdown所做的那一切,都是在markdown中写的; 代码的话,…...
具备多种功能的PDF文件处理工具
软件介绍 在日常办公和学习场景中,PDF文件使用极为频繁,而一款功能强大的PDF编辑软件能大幅提升处理效率。 今天要介绍的Adobe Acrobat Pro DC 2024.005.20414,就具备像编辑Word文档一样便捷编辑PDF的能力。 PDF文档在学习和工作中广泛应用…...
如何做好滚珠导轨的防尘工作?
滚珠导轨滑块在使用过程中,会吸附大量的灰尘和污垢,导致摩擦力增大,使用寿命缩短。那么,我们应该如何做好滚珠导轨的防尘工作呢? 1、使用防护罩:对于外露的滚珠导轨,可安装如螺旋弹簧钢带套管、…...
c语言库 strcpy函数介绍,以及实现
strcpy 函数介绍 strcpy 是 C 语言标准库中的一个字符串处理函数,定义在 <string.h> 头文件中。其作用是将一个字符串的内容从源地址复制到目标地址。 函数原型: char *strcpy(char *dest, const char *src);参数说明: dest…...
nettrace rtt分析器
开源工具学习记录之流程梳理 近期对腾讯的的开源项目: nettrace(网络故障分析工具) ,进行源码学习。 开源仓库:Nettrace开源仓库 开源工具实现注释:nettrace学习记录 Nettrace学习记录之流程梳理Nettrace eBPF程序自动挂载方式探究 nettrace rtt分析器…...
裂变营销策略在“开源链动2+1模式AI智能名片S2B2C商城小程序”中的应用探索
摘要:在当今数字化时代,企业营销手段日新月异,裂变营销作为一种高效的用户增长策略,正逐渐成为众多企业竞相探索的焦点。本文旨在探讨“开源链动21模式AI智能名片S2B2C商城小程序”中裂变营销的应用,通过“分名、分利、…...
VC++ 获取目的IP的路由
GetBestRoute 函数获取到目的IP的最佳匹配路由。 第一个参数为:destination(目的IP) 第二个参数为:source(源IP) 通常不需要指定第二个source,这个一般用来匹配具体某一个网卡接口路由的&…...
WangEditor快速实现版
WangEditor快速实现版 效果 案例代码 后端 package com.diy.springboot.controller;import cn.hutool.core.util.IdUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiImplicitParam; import org.sp…...
Java常见面试技术点整理讲解——后端框架(整理中,未完成)
前言: 对于后端常用框架的技术整理,其实框架在平时就是会用就行,但面试时多半需要描述实现原理,这个要靠自己理解,不推荐死记硬背。 这篇和另外几篇文章区分开,主要用于规整Java后端各种框架,…...
Dify 本地部署教程
目录 一、下载安装包 二、修改配置 三、启动容器 四、访问 Dify 五、总结 本篇文章主要记录 Dify 本地部署过程,有问题欢迎交流~ 一、下载安装包 从 Github 仓库下载最新稳定版软件包,点击下载~,当然也可以克隆仓库或者从仓库里直接下载zip源码包。 目前最新版本是V…...
Python----数据可视化(Seaborn二:绘图一)
常见方法 barplot方法 单独绘制条形图 catplot方法 可以条形图、散点图、盒图、小提亲图、等 countplot方法 统计数量 一、柱状图 seaborn.barplot(dataNone, xNone, yNone, hueNone, colorNone, paletteNone) 函数描述data用于绘图的数据集。x用于绘制长格式数据的输入。…...
