【前端】webpack一本通
今日更新完毕,不定期补充,建议关注收藏点赞。
目录
- 简介
- 使用
- webpack默认只能处理js文件 ->引入加载器
- 对JS语法降级,兼容低版本语法
- 合并文件
- 再次打包
- 进阶
- 工作原理
- html-webpack-plugin插件
- webpack开发服务器
- 引入
- 使用webpack-dev-server模块:热更新
简介
官网
- webpack作用(自动整合压缩并剔除无用代码)
减少文件数量、缩小代码体积、提高浏览器打开速度 - webpack定义
一个第三方模块包, 用于分析, 并打包代码
支持所有类型文件的打包
支持less/sass => css
支持ES6/7/8 => ES5
压缩代码, 提高加载速度

webpack基于node, 所以导出遵守CommonJS规范 - 安装
- 初始化文件夹包环境, 得到package.json文件
- 下载webpack等模块包
- 在package.json自定义命令, 为打包做准备
yarn init
yarn add webpack webpack-cli -D#在配置文件中 配置自定义命令
scripts: {"build": "webpack"
}
使用
- 默认src/index.js – 打包入口文件
- 引入到入口的文件才会参与打包
- 上述配置文件中的自定义命令,使得:执行package.json里build命令则执行webpack打包命令
- 默认输出dist/main.js的打包结果
- 借助webpack, 把模块和代码打包后,需要将打包结果引入到项目中生效。不希望“手动引入”这么麻烦的,可以安装html-webpack-plugin插件。其使用方法见后。
- 更改webpack打包默认的入口和出口
新建webpack.config.js
填入配置,entry设置为入口文件路径,output对象设置出口路径和文件名
打包观察效果

- 例子:webpack打包代码–jquery实现功能
注意:webpack打包后的js需要引入到html中使用才能生效
步骤:
①:从0准备环境, 初始化包环境, 下载webpack和webpack-cli包, 配置自定义命令build
②:yarn下载jquery, 新建public/index.html,写入内容
③:src/main.js 引入jquery, 编写功能代码
④:执行打包命令
⑤:复制public/index.html到dist/, 然后引入打包后的js, 运行网页观察效果
webpack默认只能处理js文件 ->引入加载器
- 处理css文件
css文件引入到入口里,webpack打包css文件依然会报错。如何让webpack能处理css文件:使用下面的两个加载器
css-loader 文档
style-loader文档
css-loader 让webpack能处理css类型文件
style-loader 把css插入到DOM中
- 下载加载器
yarn add css-loader style-loader -D
- webpack.config.js配置
module.exports={//其他配置 这里略module:{rules:[{test:/\.css$/i, //i 忽略大小写use:["style-loader","css-loader"] }]}
}
- 打包观察效果:css代码被打包进js文件中,style-loader会把css代码插入到head下style标签内
- 处理less文件
加载器使用less-loader
less-loader加载器作用: 识别less文件
less作用:将less编译为css
yarn add less less-loader -D
//配置module:{rules:[//其他配置略{test:/\.less$/,use:["style-loader","css-loader","less-loader"] }]}
步骤:新建src/less/index.less,把index.less引入到入口处,下载加载器和less来处理less文件,webpack.config.js针对less配置,(打包)转换成css后还需要css-loader和style-loader的处理。
- 处理字体文件、图片文件
webpack5, 使用asset module技术实现字体文件和图片文件处理, 无需配置额外loader,文档: https://webpack.docschina.org/guides/asset-modules/
以前用url-loader和file-loader来处理
现在webpack.config.js – 针对图片文件设置type: “assets“,然后打包,小于8KB文件则转base64打包在js中, 大于8KB, 文件自动命名输出到dist下;字体和图片文件同理。
//配置module:{rules:[//其他配置略{test:/\.(png|jpg|gif|jpeg)$/i,type:'asset'}]}
为什么要区分8kb上下?
图片翻译成了base64, 放到了js文件中
-好处: 浏览器不用发请求了,直接可以读取, 速度快
-坏处: 图片太大,再转base64就会让图片的体积增大 30% 左右, 得不偿失
- 处理字体图标
- 注意:字体图标 v.s. 字体文件
字体文件 和 字体图标(icon fonts) 是两个相关但不完全一样的东西。
- 注意:字体图标 v.s. 字体文件
- 字体文件,用于文本显示。常见格式包括:
.ttf(TrueType Font)
.otf(OpenType Font)
.woff / .woff2(Web Open Font Format)
.eot(Embedded OpenType) - 字体图标(Icon Fonts)将图标图形设计成字体的形式,用 CSS 和 HTML 字符来显示图标。
典型例子:Font Awesome、iconfont 阿里巴巴、Material Icons (Google)
它们通常包含以下资源:
字体文件(.woff, .ttf, .eot, .svg)
一个 style.css 或 iconfont.css,映射图标 class 到字体字符,通过字体的形式显示图标,比如<i class="icon-home"></i>就能显示一个小房子图标。
.icon-home:before {content: "\e600";
}
- 如何处理字体图标
- src/assets 下 放入fonts字体相关文件夹
- src/main.js 引入 assets/fonts/iconfont.css
import '@iconfont/iconfont.css'; - src/main.js 创建一个i标签, 使用字体图标标签添加到body上;或者html中使用图标
<i class="icon-home"></i> - 添加针对字体文件的加载器规则, 使用asset/resource(直接输出文件并配置路径)
const path = require('path');module.exports = {// 其他配置...module: {rules: [// 处理字体图标文件{test: /\.(woff2?|eot|ttf|otf|svg)$/,type: 'asset', //或asset/resource,generator: {filename: 'fonts/[hash][ext][query]', // 输出路径},},
//其他配置略...],},
};
- 打包后运行网页观察效果:在webpack.configjs的rules里针对字体图标文件类型设置asset/resource, 直接输出到dist下
对JS语法降级,兼容低版本语法
babel: 一个javascript编译器, 把高版本js语法降级处理输出兼容的低版本语法
babel-loader: 可以让webpack转译打包的js代码
babel官网: https://www.babeljs.cn/
babel-loader文档: https://webpack.docschina.org/loaders/babel-loader/
- 在src/main.js – 定义箭头函数, 并打印箭头函数变量 (千万不能调用, 为了让webpack打包函数, 看降级效果)
- 下载加载器
yarn add babel-loader @babel/core @babel/preset-env -D
- 配置到webpack.config.js上
module.exports = {// 其他配置...module: {rules: [{test: /\.js$/,exclude:/(node_modules|bower_components)/,use:{loader:'babel-loader',options:{presets:['@babel/preset-env']}}},
//其他配置略...],},
};
- 打包观察是否降级
合并文件
- 2个js文件 ->打包成1个js文件
新建src下的资源:add.js – 定义求和函数并导出,index.js – 引入add模块并使用函数输出结果
执行yarn build自定义命令, 进行打包 (确保终端路径在src的父级文件夹)
打包后默认生成dist和dist/main.js, 观察其中代码
再次打包
- 代码增加后, 如何打包呢?
- 确保在src/index.js引入和使用
- 重新执行yarn build打包命令
进阶
- 把css文件都独立打包提取成一个css文件在dist下
- 把vue文件让webpack打包使用(百度vue-loader官网)
工作原理
- yarn build
所有要被打包的资源都要跟入口产生直接/间接的引用关系

html-webpack-plugin插件
文档
yarn add html-webpack-plugin -D #下载
webpack.config.js中添加配置
const HtmlWebpackPlugin =require('html-webpack-plugin')
module.exports={//其他配置 这里略plugins:[new HtmlWebpackPlugin({template:'./public/index.html' //webpack打包时自动生成html文件})]
}
webpack开发服务器
webpack开发服务器, 把代码运行在内存中, 自动更新, 实时返回给浏览器显示。
打包在内存中, 速度快;自动更新打包变化的代码, 实时返回给浏览器显示;
引入
每次修改代码, 重新 yarn build 打包, 才能看到最新的效果, 实际工作中, 打包 yarn build 非常费时 (30s - 60s);
原因:
从0构建依赖
磁盘读取对应的文件到内存, webpack开始加载
再用对应的 loader 进行处理
将处理完的内容, 输出到磁盘指定目录
解决:起一个开发服务器, 缓存一些已经打包过的内容, 只重新打包修改的文件, 最终运行在内存中给浏览器使用
使用webpack-dev-server模块:热更新
webpack-dev-server文档: https://webpack.docschina.org/configuration/dev-server/
- 下载模块包
yarn add webpack-dev-server -D - 在package.json-配置自定义命令:自定义webpack开发服务器启动命令serve在package.json里
"scripts":{"build":"webpack","serve":"webpack serve"
}
- 启动当前工程里的webpack开发服务器
yarn serve,webpack-dev-server会给一个地址+端口浏览器,访问即可看到在内存中打包的index.html页面 - 重新编写代码, 观察控制台和浏览器是否自动打包和更新
- 改变webpack-dev-server配置
webpack-dev-server配置文档: https://webpack.docschina.org/configuration/dev-server/#devserverafter
在webpack.config.js中添加如下配置,重启webpack开发服务器即可
都是去文档中找配置项的名字,在webpack.config.js – devServer选项里添加
module.exports={//其他配置略devServer:{port:8888 //自定义端口号}
}
相关文章:
【前端】webpack一本通
今日更新完毕,不定期补充,建议关注收藏点赞。 目录 简介使用webpack默认只能处理js文件 ->引入加载器对JS语法降级,兼容低版本语法合并文件再次打包进阶 工作原理html-webpack-plugin插件webpack开发服务器引入使用webpack-dev-server模块…...
代码学习总结(一)
代码学习总结(一) 这个系列的博客是记录下自己学习代码的历程,有来自平台上的,有来自笔试题回忆的,主要基于 C 语言,包括题目内容,代码实现,思路,并会注明题目难度&…...
DeepSeek在应急救援领域的应用解决方案
DeepSeek在应急救援领域的应用解决方案 一、引言 1.1 应急救援领域现状 近年来,我国应急管理工作全面加强,取得了显著成效。然而,一系列重特大灾害事故暴露出我国应急管理体系存在诸多问题短板。例如,在责任落实、应急处突、法…...
第十五届蓝桥杯C/C++B组省赛真题讲解(分享去年比赛的一些真实感受)
试题A——握手问题 一、解题思路 直接用高中学的排列组合思路 二、代码示例 #include<bits/stdc.h> using namespace std; int fun(int n) {int sum0;for(int i0;i<n;i){for(int ji1;j<n;j)sum; } return sum; } int main() {cout<<fun(50)-fun(7); }三、…...
【Qt】qDebug() << “中文测试“; 乱码问题
环境 Qt Creator版本:4.7.1 编译器:MSVC2015_32bit 解法一 在.pro文件中添加 msvc:QMAKE_CXXFLAGS -execution-charset:utf-8注意: 1、需要清理项目,并重新qmake,然后构建。 测试项目下载:https://do…...
Koordinator-NodeSLO
Reconcile() 获取node和nodeSLO,设置nodeExist和nodeSLOExistnode和nodeSLO都不存在,直接返回若!nodeExist 删除对应nodeSLO 若!nodeSLOExist 初始化nodeSLO创建nodeSLO 若nodeExist和nodeSLOExist都存在 获取nodeSLOSpec,若nodeSLOSpec改变…...
Vue接口平台学习六——接口列表及部分调试页面
一、实现效果图及界面布局简单梳理 整体布局分左右,左边调试,右边显示接口列表 左侧: 一个输入框按钮;下面展示信息,大部分使用代码编辑器就好了,除了请求体传文件类型需要额外处理。然后再下方显示响应信…...
2025年消防设施操作员考试题库及答案
一、多选题 31.区域报警系统主要由()等组成。 A.火灾探测器 B.手动火灾报警按钮 C.火灾声光警报器 D消防联动控制器 E.区域型火灾报警控制器 答案:ABCE 解析:根据《基础知识》第215页,“消防联动控制器”一项可…...
【C语言】预处理(下)(C语言完结篇)
一、#和## 1、#运算符 这里的#是一个运算符,整个运算符会将宏的参数转换为字符串字面量,它仅可以出现在带参数的宏的替换列表中,我们可以将其理解为字符串化。 我们先看下面的一段代码: 第二个printf中是由两个字符串组成的&am…...
深入理解全排列算法:DFS与回溯的完美结合
全排列问题是算法中的经典问题,其目标是将一组数字的所有可能排列组合列举出来。本文将详细解析如何通过深度优先搜索(DFS)和回溯法高效生成全排列,并通过模拟递归过程帮助读者彻底掌握其核心思想。 问题描述 给定一个正整数 n&a…...
低频rfid手持机,助力动物耳标智能化管理
低频RFID手持机,助力动物耳标智能化管理,正逐步成为现代畜牧业不可或缺的工具。它不仅能够高效读取动物耳标中的信息,如唯一识别码、疫苗接种记录、健康状态等,还极大地提升了数据录入的准确性和时效性。 1.精准识别与追踪 通过…...
【从零开始学习JVM | 第三篇】虚拟机的垃圾回收学习(一)
堆空间的基本结构 Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。 Java 堆是垃圾收集器管理的主要区域,因此也被称作 GC 堆(Garbage Collected Heap&am…...
蓝桥杯之门牌
问题: 这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。 小蓝制作门牌的方法是先制作 0 到9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个…...
Jieba分词的原理及应用(三)
前言 “结巴”中文分词:做最好的 Python 中文分词组件 上一篇文章讲了使用TF-IDF分类器范式进行企业级文本分类的案例。其中提到了中文场景不比英文场景,在喂给模型之前需要进行分词操作。 分词的手段有很多,其中最常用的手段还是Jieba库进行…...
Openlayers:flat样式介绍
在前段时间我在使用WebGL矢量图层时接触到了flat样式,我对其十分的感兴趣,于是我花了几天的时间对其进行了了解,在这篇文章中我将简单的介绍一下flat样式的使用方式以及我对其的一些理解。 一、了解flat样式 1.什么是flat样式? …...
149页研读——华为基于IPD全过程研发质量管理【附全文阅读】
本文介绍了IPD(集成产品开发)的全过程研发质量管理,强调了以客户需求为导向,通过跨部门协同、资源整合、快速响应等方式提高研发效率和成功率。文章详细阐述了IPD研发管理体系的精要,包括其核心思想、优势、框架以及核心理念。 其中,跨领域平台与技术研发、端到端流程与项…...
Linux入门指南:从零开始探索开源世界
引言 欢迎来到Linux的奇妙世界!🌍 这个诞生于1991年的开源操作系统,如今已悄然成为数字世界的隐形支柱。从智能手机到超级计算机,从智能家电到航天器,Linux的身影无处不在。本文将带你纵览Linux的发展历程、主流发行版…...
Oracle 23ai Vector Search 系列之5 向量索引(Vector Indexes)
文章目录 Oracle 23ai Vector Search 系列之5 向量索引Oracle 23ai支持的向量索引类型内存中的邻居图向量索引 (In-Memory Neighbor Graph Vector Index)磁盘上的邻居分区矢量索引 (Neighbor Partition Vector Index) 创建向量索引HNSW索引IVF索引 向量索引示例参考 Windows 环…...
vue模拟扑克效果
vue模拟扑克效果 效果图: step1:C:\Users\wangrusheng\PycharmProjects\untitled18\src\views\Home.vue <template><div class"poker-container"><!-- 使用复合数据对象实现双行显示 --><divv-for"(card, index) in POKER_…...
Android12源码编译之预置Android Studio项目Android.mk文件编写
1、在AndroidManifest.xml文件中添加package"com.sprd.silentinstalldemo"属性,因为新版本的Android Studio默认生成的AndroidManifest.xml是没有这个属性值的 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:an…...
高阶函数/柯里化/纯函数
本篇文章主要是介绍一下标题里面的概念,在面试的时候经常文档,结合阅读到的资料,结合本人的个人见解出品了该文章,如有写的不好的地方或理解有误的,还望阁下多多指教。 1、高阶函数 什么是高阶函数? 接受…...
Spring Boot 测试详解,包含maven引入依赖、测试业务层类、REST风格测试和Mock测试
Spring Boot 测试详解 1. 测试依赖引入 Spring Boot 默认通过以下 Maven 依赖引入测试工具: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</s…...
探索 HTML5 新特性:提升网页开发的现代体验
在 Web 开发的演进历程中,HTML5 无疑是一座重要的里程碑。它不仅为网页带来了更丰富的功能,还提升了开发效率与用户体验。本文将深入探讨 HTML5 那些令人瞩目的新特性,助你紧跟现代 Web 开发潮流。 一、语义化标签:让结构更清晰 …...
Python中如何用正则表达式精准匹配IP地址?
在网络编程和数据处理时,我们经常需要从文本中提取或验证IP地址。Python的正则表达式(re模块)是完成这个任务的利器。但你知道怎么写才能准确匹配各种合法的IP地址吗?今天我们就来详细探讨这个问题。 为什么需要IP正则表达式? 假设你正在分…...
leetcode刷题日记——螺旋矩阵
[ 题目描述 ]: [ 思路 ]: 题目要求按顺时针顺序给出m行n列的矩阵的数组按照题目所给的顺序挨个插入答案数组中运行如下 int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {*returnSize matrixSize * matrixCol…...
金字塔原理学习法
金字塔原理学习法 金字塔原理(Pyramid Principle) 是由麦肯锡顾问芭芭拉明托提出的结构化思维方法,核心是通过纵向分层、横向归类的逻辑架构组织信息,实现复杂问题的清晰表达与高效学习。在技术学习领域,该原理能有效…...
模板引擎语法-标签
模板引擎语法-标签 文章目录 模板引擎语法-标签[toc]一、用于进行判断的{% if-elif-else-endif %}标签二、关于循环对象的{% for-endfor %}标签三、关于自动转义的{% autoescape-endautoescape %}标签四、关于循环对象的{% cycle %}标签五、关于检查值是否变化的{% ifchange %}…...
深度学习学习笔记
目录 摘要 Abstracts 简介 Hourglass Module(Hourglass 模块) 网络结构 Intermediate Supervision(中间监督) 训练过程细节 评测结果 摘要 本周阅读了《Stacked Hourglass Networks for Human Pose Estimation》…...
当Browser Use遇见A2A:浏览器自动化与智能体协作的“冰与火之歌“
——一场正在改写数字文明的技术奇遇 第一章 浏览器革命:从"手动挡"到"自动驾驶" 1.1 传统自动化工具的"中年危机" 还记得2023年那个抓狂的凌晨吗?你蹲守演唱会门票时,Selenium脚本因为验证码识别失败第108次…...
智能医疗辅助诊断:深度解析与实战教程
引言:医疗领域的新革命 在医疗资源紧张、诊断效率亟待提升的今天,智能医疗辅助诊断技术正以前所未有的速度改变医疗行业的面貌。通过结合人工智能与医学专业知识,智能医疗辅助诊断系统能够为医生提供精准的诊断建议和决策支持,显…...
