【学习笔记】Webpack5(Ⅱ)

news2025/1/14 18:06:58

Webpack

  • 3、高级篇
    •       3.1、提升开发体验 —— SourceMap
    •       3.2、提升打包速度
      •             3.2.1 HotModuleReplacement
      •             3.2.2 OneOf
      •             3.2.3 Include / Exclude
      •             3.2.4 Cache
      •             3.2.5 Thread
    •       3.3、减少代码体积
      •             3.3.1 Tree Shaking
      •             3.3.2 Babel
      •             3.3.3 Image Minimizer
    •       3.4、优化代码运行性能
      •             3.4.1 Code Split
      •             3.4.2 统一命名
      •             3.4.2 Preload / Prefetch
      •             3.4.3 Network Cache
      •             3.4.4 Core-js
      •             3.4.5 PWA

3、高级篇

      3.1、提升开发体验 —— SourceMap

        当使用开发服务器调试代码的时候,可以在浏览器中看到编译后的代码,开发模式下我们是让 css 并入 js 文件因为在配置开发模式的配置文件时没有让 css 单独提取出来
在这里插入图片描述
        此时如果代码运行出错,我们点击这些错误的链接
在这里插入图片描述
        会发现它让我们去观察编译后的代码的错误,不经阿这阿这阿这了出来…谁看得懂你编译后这是哪跟哪啊…
在这里插入图片描述
        甚至是后续一旦将来开发代码文件很多,就更难去发现该错误对应我们原代码中的哪个地方,因此如果能够让这些错误的链接一点击,就能让我们看到是源码的哪里出了错,而不是编译后的文件哪里出了错,来帮助我们更好的调试、修改代码,因此我们可以使用 SourceMap 来解决这个问题
        SourceMap(源代码映射)是一个用来生成源代码与构建后代码一一映射的文件的方案。,它会生成一个 xxx.map 文件,里面包含源代码和构建后代码每一行、每一列的映射关系。当构建后代码出错了,会通过 xxx.map 文件,从构建后代码出错位置找到映射后源代码出错位置,从而让浏览器提示源代码文件出错位置,帮助我们更快的找到错误根源
        开发环境配置,修改 webpack.dev.js 文件如下

// 在暴露的对象身上添加一个 devtool 配置
devtool: "cheap-module-source-map",

        生产环境配置,修改 webpack.prod.js 文件如下

// 在暴露的对象身上添加一个 devtool 配置
devtool: "source-map",
优缺点 描述
cheap-module-source-map ① 优点:打包编译速度快,只包含行映射
② 缺点:没有列映射
source-map ① 优点:包含行 / 列映射
② 缺点:打包编译速度更慢

        修改完配置后现在重启开发服务器,点击错误这个地方
在这里插入图片描述
        会发现给我们跳转到源码上出现错误的地方了
在这里插入图片描述        再来看一下生产模式下会是什么样的,运行npm run build先进行打包,打包之后可以看到 dist/static/js 下多出了一个 main.js.map 的文件,这个文件是一个源映射文件,将打包后的 JavaScript 代码映射回原始的源代码,以及源代码中的位置信息,因此当编译后的代码出错时,我们点击控制台中的链接,就会按照这个映射,给我们跳转到源码上出错的地方了
在这里插入图片描述
        观察出错的地方,我们可以发现 source-map 对源码的定位是包括行和列的,如果只是行的话,那么 return 下方也会划有红线

      3.2、提升打包速度

            3.2.1 HotModuleReplacement

        在开发过程中,随着项目的体积越来越大,打包的速度会越来越慢,如果在后续项目一大时进行开发,我们有时只需修改了一点点的代码例如某个变量值变一下,然而 Webpack 默认还是会将所有模块全部重新打包编译,导致每次修改一点代码都需要经历漫长的编译等待,体验很差,此时我们可以使用 HotModuleReplacement 来解决这个问题
        Hot Module Replacement (HMR) 是 Webpack 提供的一项功能,它允许在运行时替换、添加或删除模块,能够使得只让修改的模块重新打包编译而其他模块不需要进行重新打包编译,且无需完全重新加载整个页面(即不会刷新页面,从而能保留应用的状态如表单输入、滚动位置等会被保留)。这对开发体验有很大的提升,使得开发过程更加流畅和高效
        只需要修改开发模式配置文件的devServer配置即可

// webpack.dev.js
devServer: {
   
	host: "localhost", // 启动服务器域名
	port: "3002", // 启动服务器端口号
	open: true, // 是否自动打开浏览器
	hot: true, // 开启HMR功能
},

        配置之后更改 css 代码可以发现页面不会重新刷新了,并且在控制台可以看到 [HMR] 开头的提示,这说明其只对修改的 css 模块进行重新编译打包

        然而现在修改 js 代码还是会发现页面被刷新,即整个项目重新打包编译,因此还需要做进一步的配置

// 在入口文件 src/main.js 中添加如下代码
if (module.hot) {
   
  module.hot.accept("./js/count.js"); // count模块需要实现热模块替换功能
  module.hot.accept("./js/sum.js"); // sum模块需要实现热模块替换功能
}

        当我们运行开发服务器的时候,修改 count.js / sum.js 的代码只会重新打包编译相应的模块而不会导致整个模块重新打包编译,注意不是修改 module.hot.accept 函数中的代码,修改了其中的代码,页面依然会刷新、项目依然会重新打包编译,可见 HRM 是帮助我们在修改模块的时候可以更快速地完成打包编译工作
        当运行开发服务器后对模块代码进行更改如下

// sum.js 原来的代码
export default function count(x, y) {
   
  return x + y;
}

// 尝试修改并观察浏览器
export default function count(x, y) {
   
  return x + y +1;
}

        会发现浏览器并没有刷新,并且控制台输出了 [HMR] 开头的提示信息,这就说明我们的配置成功了
在这里插入图片描述
        然而在实际的开发中,需要我们一个个模块都这样声明是很麻烦的,因此我们通常会使用一些 loader 来解决,在开发 vue 时可以使用 vue-loader 、在 开发 react 的时候可以使用 react-hot-loader 来帮我们自动地实现这个功能
        最后需要注意的是 HMR 是应用在开发模式下的,是为了提高我们的开发速度,让我们可以更快地看到代码修改后的成果,而不是应用在生产模式下的,当代码结束了开发阶段后,还是需要老老实实地从将整个项目重新打包

            3.2.2 OneOf

        由于每个文件都只会使用一个 rule 中指明地 loader 去进行处理,然而当我们什么都不配置的时候,每个文件都会与配置中间中出现的所有 loader 进行对比,即使已经匹配到了相应的 rule,然是还是不会停下来,会对比完所有的 rule 才结束,这显然是大可不必的,因此处理方法是将所有的 rule 都放在 oneOf 指明的数组里

// webpack.dev.js      webpack.prod.js配置同理
// 修改rules配置
rules: [
  {
   
    oneOf: [
      {
   
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
      {
   
        test: /\.less$/,
        use: ["style-loader", "css-loader", "less-loader"],
      },
      {
   
        test: /\.s[ac]ss$/,
        use: ["style-loader", "css-loader", "sass-loader"],
      },
      {
   
        test: /\.styl$/,
        use: ["style-loader", "css-loader", "stylus-loader"],
      },
      {
   
        test: /\.(png|jpe?g|gif|webp)$/,
        type: "asset",
        parser: {
   dataUrlCondition: {
   maxSize: 50 * 1024}}, //解析
        generator: {
   filename: "static/imgs/[hash:8][ext][query]"},
      },
      {
   
        test: /\.(ttf|woff2?)$/,
        type: "asset/resource",
        generator: {
   
          filename: "static/media/[hash:8][ext][query]",
        },
      },
      {
   
        test: /\.js$/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1691293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iMX6ULL 嵌入式linux开发 | 4G无线广播终端实现方案介绍

现有的有线广播,如村上的大喇叭,需要布线,施工麻烦。借助现有的4G网络,传输音频流完全没问题,4G网络结合流媒体技术和MQTT消息传递实现设备间的同步推拉流。这种方案可以避免有线布线的麻烦,同时实现4G无线…

Spark在YARN上运行图解(资源调度+任务调度)及案例

前提:已经安装了spark集群,可参考上篇文章搭建:http://t.csdnimg.cn/UXBOp 一、Spark集群配置YARN 1、增加hadoop 配置文件地址 vim spark-env.sh 增加export HADOOP_CONF_DIR/usr/local/soft/hadoop-3.1.1/etc/hadoop 2、关闭虚拟内存 cd …

DMR对讲机数字协议详解

一、概述 DMR数字对讲机协议是欧洲电信标准协会在2005年4月推出的数字对讲机标准,后来又进行了多次修改。最新版本DMR数字对讲机协议是2007年12月公布的,共有四部分:第一部分为空中接口物理层和数据链路层协议,第二部分为空中接口…

【Unity AR开发插件】四、制作热更数据-AR图片识别场景

专栏 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 链接: Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

牛客网刷题 | BC93 公务员面试

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 公务员面试现场打分…

【安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT】

安装笔记-系列文章目录 安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT 文章目录 安装笔记-系列文章目录安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT 前言一、软件介绍名称:OpenWRT主页官方介绍 二、安装步骤测试版本:openwrt-23.05…

C语言在VS中使用scanf报错?

我们在使用VS时,用scanf函数,VS会报以下错误: 以下是解决方法: 来到输出窗口,复制以下语句:_CRT_SECURE_NO_WARNINGS 第一种暂时方法 1.在代码的第一行,写下:#define _CRT_SECURE_…

vuejs路由和组件系统

前端路由原理 createRouter * hash* window.addEventListener(hashChange)* 两种实现路由切换的模式:UI组件(router-link,router-view),Api(push()方法) * history * HTML5新增的API &#xff0…

2024年电工杯A题论文首发+摘要分享+问题一代码分享

问题一论文代码链接:https://pan.baidu.com/s/1kDV0DgSK3E4dv8Y6x7LExA 提取码:sxjm --来自百度网盘超级会员V5的分享 园区微电网风光储协调优化配置 摘要:园区微电网由风光发电和主电网联合为负荷供电,为了尽量提高风光电量的…

机器人运动轨迹学习——GMM/GMR算法

机器人运动轨迹学习——GMM/GMR算法 前置知识 GMM的英文全称为:Gaussian mixture model,即高斯混合模型,也就是说,它是由多个高斯模型进行混合的结果:当然,这里的混合是带有权重概念的。 一维高斯分布 GMM中…

鸿蒙布局List简介

鸿蒙布局List简介 List--常见的布局容器List 创建方式创建方式一,通过Listitem创建方式二,通过ForEach和Listitem创建方式三,通过ListItemGroup List–常见的布局容器 List是在app开发中最常见的一种布局方式,例如通讯录、新闻列…

Vue3实现简单的瀑布流效果,可抽离成组件直接使用

先来看下效果图: 瀑布流中的内容可进行自定义,这里的示例图是通过不同背景颜色的展示进行区分,每个瀑布流中添加了自定义图片和文字描述。 实现方式: 1.建立子组件(可单独抽离)写出瀑布流的样式 文件名为…

远程桌面连接不上远程服务器,如何有效的解决远程桌面连接不上远程服务器的问题

在解决远程桌面连接不上远程服务器的问题时,我们需要采取一种专业且系统的方法来排查和修复可能存在的故障。以下是一些建议和步骤,帮助用户更有效地解决此类问题。 首先,用户需要确认远程服务器的状态和网络连接是否正常。 这包括检查服务器…

51汇编版--配套proteus仿真

代码配套的仿真,我自己试过是好使的,外部中断,计数功能要自己添加脉冲信号或按键才能有对应现象,自己搞一下子。 不限速下载链接 https://wwo.lanzoul.com/iQ46m1zm456j 密码:g92f 如果连接不正常,请尝试将lanzoul的…

Python游戏编程:一步步用Python打造经典贪吃蛇小游戏

贪吃蛇作为一款极其经典且广受欢迎的小游戏,是早期 Windows 电脑和功能手机(特别是诺基亚手机)流行度极高的小游戏,是当时功能手机时代最具代表性的游戏之一。游戏的基本规则和目标十分简单,但却极具吸引力&#xff0c…

【管理咨询宝藏111】安永某集团供应链流程设计及现状分析报告

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏111】安永某集团供应链流程设计及现状分析报告 【格式】PDF版本 【关键词】安永、供应链、流程优化 【核心观点】 - 缺乏客户分级,无…

力扣HOT100 - 75. 颜色分类

解题思路&#xff1a; 单指针&#xff0c;对数组进行两次遍历。 class Solution {public void sortColors(int[] nums) {int p 0;int n nums.length;for (int i 0; i < n; i) {if (nums[i] 0) {int tmp nums[i];nums[i] nums[p];nums[p] tmp;p;}}for (int i p; i …

visual studio 2022 ssh 主机密钥算法失败问题解决

 Solution - aengusjiang 问题&#xff1a; I follow the document, then check sshd_config, uncomment“HostKey /etc/ssh/ssh_host_ecdsa_key” maybe need add the key algorithms: #HostKeyAlgorithms ssh-ed25519[Redacted][Redacted]rsa-sha2-256,rsa-sha2-512 Ho…

对于高速信号完整性,一块聊聊啊(10)

本文包含的主要内容有: 过孔设计概述:从前面的各种基础知识到过孔设计,逐步对信号完整性有了初步了解,在过孔设计这里稍微做一个概述,也是个人的一些理解,算是一个小结。 过孔设计的必要性。 过孔结构的基础知识 实例:过孔设计仿真HFSS实例 过孔设计概述 通过前面…

如何运用多媒体,打造企业实力展示厅?

企业文化、产品是其长期发展的根本所在&#xff0c;为此越来越多的企业开始选择运用多媒体互动&#xff0c;来打造企业多媒体展厅的方式&#xff0c;对企业文化、品牌形象、产品进行推广宣传&#xff0c;并在多媒体互动装置的支持下&#xff0c;能让客户能够快速且全面的了解企…