Webpack基本用法学习总结
Webpack
- 基本使用
- 核心概念
- 处理样式资源
- 步骤:
- 处理图片资源
- 修改图片输出文件目录
- 自动清空上次打包的内容
- Eslint
- Babel
- 处理HTML资源
- 搭建开发服务器
- 生产模式
- 提取css文件为单独文件
- 问题:
- Css压缩
- HTML压缩
- 小结1
- 高级
- SourceMap
- 开发模式
- 生产模式
- HMR
- OneOf
- Include/Exclude
- Cache
- Thead
- Tree Shaking
- Babel
- 压缩图片
- Code Split
- 多入口
- 按需加载
- Preload / Prefetch
- Core-js
- PWA
- 总结
基本使用
- webpack是一个静态资源打包工具
- 他会以一个或者多个文件作为打包的入口,将我们整个项目所有文件编译组合成一个或者多个文件输出出去
- 输出的文件就是编译好的文件,就可以在浏览器中运行了
- 我们将webpack输出的文件叫做bundle
核心概念
- entry(入口):指示Webpack从哪个文件开始打包
- output(输出):指示Webpack打包完的文件输出到哪里去,如何命名等
- loader(加载器):webpack本身只能处理js、json等资源,其他资源需要借助loader、webpack才能解析
- plugins(插件):扩展webpack的功能
- mode(模式):
- 开发模式:development
- 生产模式:production
- 开发服务器:devServer
处理样式资源
- webpack本身是不能识别样式资源的,所以我们需要借助Loader来帮助Webpack解析样式资源
步骤:
- 安装相应的loader
- 在webpack.config.js中进行配置
- npx webpack进行打包即可
处理图片资源
- 将小于10kb的图片转为base64编码格式
//处理图片资源{test: /\.(png|jpg|gif|jpeg|webp)$/,type: "asset",parser: {dataUrlCondition: {maxSize: 10 * 1024, //小于10kb的图片,会被base64处理},},},
修改图片输出文件目录
- 添加generator属性
//处理图片资源{test: /\.(png|jpg|gif|jpeg|webp)$/,type: "asset",parser: {dataUrlCondition: {maxSize: 10 * 1024, //小于10kb的图片,会被base64处理},},generator: {//输出图片名称filename: "static/images/[hash][ext][query]",},},
自动清空上次打包的内容
- 在output中的clean属性设置为true
Eslint
- 可组装的Javascript和JSX检查工具
- 它是用来检测js和jsx语法的工具,可以配置各项功能
Babel
- JavaScript编译器
- 主要用于将ES6编写的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧版本的浏览器或者其他环境中
处理HTML资源
- Defer的作用:在 HTML 中,
搭建开发服务器
- 自动化:devServer
- 在webpack.config.js中进行配置
//开发服务器devServer:{host:"localhost", //启动服务器域名port:"3000", //启动服务器端口open:true // 是否自动打开浏览器},
生产模式
- 生产模式是开发完成代码后,我们需要得到代码将来部署上线
- 这个模式下我们主要对代码进行优化,让其运行性能更好,优化主要从两个角度出发:
- 优化代码运行性能
- 优化代码打包速度
提取css文件为单独文件
- css文件目前被打包到js文件中,当js文件加载时,会创建一个style标签来生成样式
- 这样对于网站来说会出现闪屏现象,用户体验不好
- 我们应该是单独的css文件,通过link标签加载性能更好
- 使用下面的插件
mini-css-extract-plugin
问题:
- 为什么通过style标签加载css会出现闪屏现象,但是通过link标签则不会呢
- 当您通过
Css压缩
npm install css-minimizer-webpack-plugin --save-dev
HTML压缩
- 默认生产模式已经开启了:HTML压缩和js压缩
小结1
高级
- 所谓高级配置其实就是进行Webpack优化,让我们代码在编译/运行时性能更好
SourceMap
- SourceMap(源代码映射)是一个用来生成源代码与构建后代码一一映射的文件的方案。
- 作用:它会生成一个xxx.map文件,里面包含源代码和构建后代码每一行、每一列的映射关系。当构建后代码出错了,会通过xxx.map文件,从构建后代码出错位置找到映射后源代码出错位置,从而让浏览器提示源代码文件出错位置,帮助我们更快的找到错误根源
开发模式
cheap-module-source-map
- 优点:打包编译速度快,只包含行映射
- 缺点:没有列映射
module.exports = {mode:"development",devtool:"cheap-module-source-map"
}
生产模式
source-map
- 优点:包含行/列映射
- 缺点:打包编译速度更慢
module.exports = {mode:"production",devtool:"source-map"
HMR
- 全称:
HotModuleReplacement(HMR/热模块替换)
:在程序运行中,替换、添加或者删除模块,而无需重新加载整个页面
OneOf
- 为什么:打包时每个文件都会经过所有loader处理,虽然因为test正则原因实际没有处理上,但是都要过一遍,比较慢
- 是什么:顾名思义就是只能匹配上一个loader,剩下的就不匹配了
Include/Exclude
- 为什么:开发时我们需要使用第三方库和插件,所有文件都下载到node-modules中了,而这些文件是不需要编译可以直接使用的,所以我们在对js文件处理时,要排除node-modules下面的文件
- 是什么:
- include:包含,只处理xxx文件
- exclude:排除,除了xxx文件以外其他文件都处理
Cache
- 为什么:每次打包时js文件都要经过Eslint检查和Babel编译,速度比较慢。我们可以缓存之前的Eslint检查和Babel编译结果,这样第二次打包时速度就会更快了。
- 是什么:对Eslint检查和Babel编译结果进行缓存
Thead
- 为什么:当项目越来越大时,打包速度越来越慢。我们想要继续提升打包速度,其实就是要提升js的打包速度,因为其他文件都比较少。而对js文件处理主要就是eslint、babel、Terser三个工具,所以我们要提升他们的运行速度,我们可以开启多进程同时处理js文件,这样速度就比之前的单进程打包更快了
- 是什么:多进程打包:开启电脑的多个进程同时干一件事,速度更快。
需要注意:请仅在特别耗时的操作中使用,因为每个进程启动就有大约为600ms左右的开销。
Tree Shaking
- 用来减少代码体积
- 为什么:开发时我们定义了一些工具函数库,或者引用第三方工具函数库或者组件库。如果没有特殊处理的话我们打包时会引入整个库,但是实际上可能我们可能只用上极小部分的功能。这样将整个库都打包进来,体积就太大了。
- 是什么:Tree Shaking是一个术语,通常用于描述移除Javascript中的没有使用上的代码。
注意:它依赖ES Module
生产模式下自动开启了这个功能
Babel
- Babel-runtime
压缩图片
- 开发如果项目中引用了较多图片,那么图片体积会比较大,将来请求速度比较慢。我们可以对图片进行压缩,减少图片体积。
注意:如果项目中图片都是在线链接,那么就不需要了,本地项目静态图片才需要进行压缩。 - 插件:
image-minimizer-webpack-plugin
Code Split
- 作用:优化代码运行性能
- 为什么:打包代码时会将所有js文件打包到一个文件中,体积太大了。我们如果只要渲染首页,就应该只加载首页的js文件,其他文件不应该加载
- 所以我们需要将打包生成的文件进行代码分割,生成多个js文件,渲染哪个页面就只加载某个js文件,这样加载的资源越少,速度就更快。
- 是什么:代码分割,主要做了两件事
- 分割文件:将打包生成的文件进行分割,生成多个js文件。
- 按需加载:需要哪个文件就加载哪个文件
多入口
- 有多个入口文件就是多入口
- 打包后会生成多个文件
entry: {//有多个入口文件:多入口main: "./src/main.js",app: "./src/app.js",},
按需加载
- 可以使用import的动态导入,会将动态导入的文件代码分割(拆分成单独模块),在需要使用的时候自动加载。
- 返回值是一个
promise
对象
//动态import
const btn = document.getElementsByClassName("btm");
btn[0].addEventListener("click", () => {import("./count.js").then((res) => {console.log(res.default(1, 6));}).catch((err) => {console.log(err);});
});
Preload / Prefetch
- 为什么:前面已经做了代码分割,同时会使用import动态导入语法来进行代码按需加载(也叫懒加载,比如路由懒加载就是这样实现的)。但是加载速度还不够好,比如:是用户点击按钮时才加载这个资源的,如果资源体积很大,那么用户会感觉到明显卡顿效果。我们想在浏览器空闲时间,加载后续需要使用的资源,我们就需要用上preload和prefetch技术。
- 是什么:
- Preload:告诉浏览器立即加载资源
- Prefetch:告诉浏览器在空闲时才开始加载资源
- 共同点:
- 都只会加载资源,并不执行。
- 都有缓存
- 区别:
- Preload加载优先级高,Prefetch加载优先级低
- Preload只能加载当前页面需要使用的资源,Prefetch可以加载当前页面资源,也可以加载下一个页面需要使用的资源
- 总结:
- 当前页面优先级高的资源用Preload加载。
- 下一个页面需要使用的资源用Prefetch加载。
Core-js
- 为什么:babel对js代码的兼容性处理不能做到面面俱到,一旦遇到低版本浏览器会直接报错,所以我们想要将js兼容性问题彻底解决
- 是什么:
core-js
是专门用来做ES6以及以上API的polyfill
。polyfill
翻译过来叫做垫片/补丁。就是用社区上提供的一段代码,让我们在不兼容某些新特性的浏览器上,使用该新特性。 - 完整引入:
import 'core-js'
- 按需加载:
import "core-js/es/promise"
PWA
- 为什么:开发Web App项目,项目一旦处于网络离线情况,就没法访问了。
- 是什么:渐进式网络应用程序(progressive web application),是一种可以提供类似于native app(原生应用程序)体验的Web App的技术。其中最重要的是,在离线时应用程序能够继续运行功能。内部通过
Service Workers
技术实现
总结
相关文章:

Webpack基本用法学习总结
Webpack 基本使用核心概念处理样式资源步骤: 处理图片资源修改图片输出文件目录 自动清空上次打包的内容EslintBabel处理HTML资源搭建开发服务器生产模式提取css文件为单独文件问题: Css压缩HTML压缩 小结1高级SourceMap开发模式生产模式 HMROneOfInclud…...

阿里云服务器数据库故障排查指南?
阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器(如ECS自建数据库或阿里云RDS等托管数据库)的故障排查指南,涵盖常见问题的定位与解决方案: 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…...

数图闪耀2025深圳CCFA中国零售博览会:AI+零售数字化解决方案引发现场热潮
展会时间:2025年5月8日—10日 地点:深圳国际会展中心(宝安新馆) 【深圳讯】5月8日,亚洲规模最大的零售行业盛会——2025 CCFA中国零售博览会在深圳盛大开幕。本届展会汇聚全球25个国家和地区的900余家参展商ÿ…...
Vue2 中 el-dialog 封装组件属性不生效的深度解析(附 $attrs、inheritAttrs 原理)
Vue2 中 el-dialog 封装组件属性不生效的深度解析(附 $attrs、inheritAttrs 原理) 在使用 Vue2 和 Element UI 进行组件封装时,我们常会遇到父组件传入的属性不生效的情况,比如在封装的 el-dialog 组件中传入 width"100%&qu…...

LeetCode 1722. 执行交换操作后的最小汉明距离 题解
示例: 输入:source [1,2,3,4], target [2,1,4,5], allowedSwaps [[0,1],[2,3]] 输出:1 解释:source 可以按下述方式转换: - 交换下标 0 和 1 指向的元素:source [2,1,3,4] - 交换下标 2 和 3 指向的元…...

linux ptrace 图文详解(八) gdb跟踪被调试程序的子线程、子进程
目录 一、gdb跟踪被调试程序的fork、pthread_create操作 二、实现原理 三、代码实现 四、总结 (代码:linux 6.3.1,架构:arm64) One look is worth a thousand words. —— Tess Flanders 相关链接: …...

游戏:用python写梦幻西游脚本(谢苏)
《梦幻西游》是一款受欢迎的网络游戏,许多玩家希望通过脚本来增强游戏体验,比如自动打怪、自动治疗等。本文将为您展示一个用Python编写简单《梦幻西游》自动打怪脚本的方案。 需求分析 1.1 具体问题 在《梦幻西游》中,玩家需要频繁与怪物进行…...
MLX-Audio:高效音频合成的新时代利器
MLX-Audio:高效音频合成的新时代利器 现代社会的快节奏生活中,对语音技术的需求越来越高。无论是个性化语音助手,还是内容创作者所需的高效音频生成工具,语音技术都发挥着不可或缺的作用。今天,我们将介绍一个创新的开…...

Spring Boot 3.x集成SaToken使用swagger3+knife4j 4.X生成接口文档
说一说Spring Boot 3.X集成SaToken使用swagger3并使用第三方的knife4j踩过的坑,废话不多说直接上正题,SaToken的我就不贴了 第一步当然是要先导入相关的依赖,包括swagger和knife4j,如下 <dependency><groupId>com.gi…...

用Python监控金价并实现自动提醒!附完整源码
💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【星海网址导航】💻香港大宽带-4H4G 20M只要36/月👉 点此查看详情 在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价。但黄金价格实时波动频繁…...
软考-软件设计师中级备考 11、计算机网络
1、计算机网络的分类 按分布范围分类 局域网(LAN):覆盖范围通常在几百米到几千米以内,一般用于连接一个建筑物内或一个园区内的计算机设备,如学校的校园网、企业的办公楼网络等。其特点是传输速率高、延迟低、误码率低…...
【一】浏览器的copy as fetch和copy as bash的区别
浏览器的copy as fetch和copy as bash的区别 位置:devTools->network->请求列表右键 copy as fetch fetch("https://www.kuaishou.com/graphql", {"headers": {"accept": "*/*","accept-language": &qu…...

ChatTempMail - AI驱动的免费临时邮箱服务
在当今数字世界中,保护在线隐私的需求日益增长。ChatTempMail应运而生,作为一款融合人工智能技术的新一代临时邮箱服务,它不仅提供传统临时邮箱的基本功能,还通过AI技术大幅提升了用户体验。 核心功能与特性 1. AI驱动的智能邮件…...

掌握单元测试:提升软件质量的关键步骤
介绍 测试:是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。 阶段划分:单元测试、集成测试、系统测试、验收测试。 测试方法:白盒测试、黑盒测试及灰盒测试。 单元测试:就是针对最小的功能单元(方法&…...
DeepSeek+Excel:解锁办公效率新高度
目录 一、引言:Excel 遇上 DeepSeek二、认识 DeepSeek:大模型中的得力助手2.1 DeepSeek 的技术架构与原理2.2 DeepSeek 在办公场景中的独特优势 三、DeepSeek 与 Excel 结合的准备工作3.1 获取 DeepSeek API Key3.2 配置 Excel 环境 四、DeepSeekExcel 实…...

YOLOv1模型架构、损失值、NMS极大值抑制
文章目录 前言一、YOLO系列v11、核心思想2、流程解析 二、损失函数1、位置误差2、置信度误差3、类别概率损失 三、NMS(非极大值抑制)总结YOLOv1的优缺点 前言 YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)由…...

【论文阅读】——Articulate AnyMesh: Open-Vocabulary 3D Articulated Objects Modeling
文章目录 摘要一、介绍二、相关工作2.1. 铰接对象建模2.2. 部件感知3D生成 三、方法3.1. 概述3.2. 通过VLM助手进行可移动部件分割3.3. 通过几何感知视觉提示的发音估计3.4. 通过随机关节状态进行细化 四、实验4.1. 定量实验发音估计设置: 4.2. 应用程序 五、结论六、思考 摘要…...

HarmonyOS基本的应用的配置
鸿蒙HarmonyOS组建页面 1、创建ets文件并配置2、修改main_pages.json文件3、修改EntryAbility.ets文件(启动时加载的页面) 1、创建ets文件并配置 Index.ets是创建项目自动构建生成的,我们可以将其删除掉,并重新在page文件夹下创建…...

【redis】集群模式
Redis Cluster是Redis官方推出的分布式解决方案,旨在通过数据分片、高可用和动态扩展能力满足大规模数据存储与高并发访问的需求。其核心机制基于虚拟槽分区,将16384个哈希槽均匀分配给集群中的主节点,每个键通过CRC16哈希算法映射到特定槽位…...
生成自定义的androidjar文件具体操作
在Androidsdk目录下的platform找到对应的api的android源码包路径,如android-32拷贝里面的android.jar文件到目录,如 C:\Users\xxxxxxx\Desktop\android\new_android_jar,然后解压android.jar到目录new_android_jar下。在编译后的aosp源码中找…...

DeepSeek实战--微调
1.为什么是微调 ? 微调LLM(Fine-tuning Large Language Models) 是指基于预训练好的大型语言模型(如GPT、LLaMA、PaLM等),通过特定领域或任务的数据进一步训练,使其适应具体需求的过程。它是将…...
API请求参数有哪些?
通用参数 app_key:应用的唯一标识,用于验证应用身份,调用API时必须提供。 timestamp:请求时间戳,通常为当前时间的毫秒级时间戳,用于防止请求被重放攻击。 format:返回数据的格式,…...
Kaggle图像分类竞赛实战总结详细代码解读
前言 我是跟着李沐的动手学深度学习v2视频学习深度学习的,光看不做假把式,所以在学习完第七章-现代卷积神经网络之后,参加了一次李沐发布的Kaggle竞赛。自己动手,从组织数据集开始,到训练,再到推理&#x…...
系统间安全复制和同步文件
1、系统间安全的复制文件 1.1复制远端文件/目录到本地 scp 192.168.1.2:/etc/yum.conf /etc scp -r 192.168.1.2:/etc/dir /home scp -r -P 6022 root192.168.1.2:/etc/dir /home #-P参数指定远端服务器的ssh端口 1.2 复制本地文件/目录去远端 scp /etc/yum.conf root19…...
Cursor无法SSH远程连接服务器免密登录问题
在本地机器和Ubuntu服务器之间实现SSH远程免密连接,可按如下步骤操作: 1. 生成SSH密钥对 在本地机器上开启终端,使用以下命令生成SSH密钥对: ssh-keygen -t rsa按提示操作,一般直接回车,这样密钥会生成在…...
RHCSA Linux系统软件管理和进程管理
1. RPM管理工具 (1)简介 ① 包名格式 软件名 - 主版本 - 次版本 - 修订号 - 软件发布次数 - 发行商 - CPU架构平台 - 支持系统位数.rpm eg: zsh - 5.0.2 - 14.el7.x86_64.rpm ② 相关网站 http://rpmfind.net/, http://rpm.pbone.net/ ࿰…...
地平线rdk-x5部署yolo11(1) 模型转出
一. 模型导出: 可以参考RDK X5部署YOLOv8-Seg 和v8差不多 、拷贝YOLO项目 git clone https://github.com/ultralytics/ultralytics.git 2、虚拟环境和依赖安装 # 安装虚拟环境 conda create -n yolov8 python3.8 -y # 进入虚拟环境 conda activate yolov8 # 安…...
开源AI对比--dify、n8n
原文网址:开源AI对比--dify、n8n-CSDN博客 简介 本文介绍开源AI工作流工具的选型。 对比 项difyn8n占优者学习难度简单中等dify核心理念用LLM构建应用。“连接一切”。以工作流自动化连接各系统。平手工作模式 Chatflow:对话。支持用户意图识别、上下…...

移动端前端开发中常用的css
在开发移动端项目的时候,很多样式都是相同的,比如说图标大小,头像大小,页面底部保存(添加按钮),项目主体颜色等等,对于这些在项目中常用到的,通常都会写在公共样式中(pub…...

Linux安装Weblogic 教程
前言 WebLogic 是一个由 Oracle 提供的企业级应用服务器,广泛用于部署和管理 Java EE(Enterprise Edition)应用程序。它支持多种服务,包括 Web 服务、企业信息系统、消息驱动的应用等。它是一个强大的应用服务器,旨在…...