webpack热更新是什么(webpack热更新原理)

背景 传统开发页面,每次更新的时候需要我们手动刷新浏览器才会更新。自从构建工具横空出世。我们可以通过热更新的方式来进行更新。通称HMR(hotmodulereplacement),也就是模块热替换,当你每次需要更新代码的时候,不在需要手动刷新即可实现效果预览。 前置知识 探究热更新是怎么实现之前,我们需要知道几样东西 sockjswebpack.HotModuleReplacementPlugin…

环境

传统式开发设计网页页面,每一次升级的过程中要大家手动式更新电脑浏览器才会升级。自打搭建专用工具问世。我们可以根据热更新的方法来实现升级。统称HMR(hot module replacement),也就是控制模块热更换,如果你每一次必须升级编码的情况下,没有在必须手动式更新就可以完成实际效果浏览。

外置专业知识

研究热更新是怎么完成以前,大家必须了解几种东西

  • sockjs
  • webpack.HotModuleReplacementPlugin
  • memory-fs
  • webpack-dev-middleware
  • webpack一些常识和一些最底层专业知识,不然你可能会不明白,而且属于懵圈情况,针对一些东西都提供了连接
  • Compiler事情流

memory-fs

内存系统文件,webpack默认设置形成的资料会扔到内存中,并不会立即写入电脑硬盘

webpack.HotModuleReplacementPlugin

汉语文本文档

英语文本文档

这个是HMR完成关键,由webpack内部结构所供应的一个软件,该插件会给予一些方式,用以查验变动,并对你说每一次变动所形成的文档hash

sockjs

用以推送socket要求,通告电脑浏览器开展变更

webpack-dev-middleware

webpack-dev-middleware会接受一个webpack所回到的一个compiler目标,随后启用compiler.watch监视文档变更,

我们知道webpack热更新的情况下,并不会写入电脑硬盘中,这是由于默认设置的情形下是写入内存的,由于内存的获取速率比电脑硬盘会快许多,我们可以根据devServer.writeToDisk来改动

if (options.writeToDisk) {
    // 写入电脑硬盘
} else {
    // 写入内存,并设定内存中的途径为现阶段途径
    const memoryFs = new MemoryFs()
}
复制代码

那样大家就可以了解文档是不是变更,而且把文档存有了内存中,现在在返回webpack-dev-server

HMR是怎么完成的

这儿用webpack-dev-server开展举例说明,全部热更新基本原理基本上相近。笔写大家完成一个简便的webpack环境变量。

const path = require(\'path\')
const webpack = require(\'webpack\')
const HtmlWebpackPlugin = require(\'html-webpack-plugin\')

module.exports = {
    entry: \'./src/index.js\',
    output: {
        path: path.resolve(._dirname, \'dist\'),
        filename: \'main.js\'
    },
    devServer: {
        host: \'localhost\',
        contentBase: path.resolve(__dirname, \'src\')
        port: 8080,
        hot: true,
        open: true
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin(),
        new HtmlWebpackPlugin({
            template: \'./src/pages/index.html\',
            filename: \'index.html\'
        })
    ]
}
复制代码

简易完成

看懂webpack-dev-server的热更新

这是一个简易的流程表,不涉及到一切繁杂逻辑性,这图上大家必须了解好多个问题

  1. 为什么必须运行
  2. 为什么必须加上webpack.HotModuleReplacementPlugin
  3. webpack-dev-server如何判断文档发生了转变
  4. 怎样完成升级

如今大家拥有上边的问题,来逐一去看看下

  1. 为什么必须webpack.HotModuleReplacementPlugin

这个是webpack官方网所供应的软件,该插件给予了一些方式,在我们运行的情况下webpack会给每一个文档引入moudle一个目标,这一目标里边有一个module.hot目标,实际可以参照 汉语文本文档 ,而且webpack每一次再次搭建的过程中会形成一个hash,在我们把devServer.writeToDisk设定为true的情况下,每一次变更还会继续形成这2个文档。

  • hot-update.js是每一次必须发布的文档
  • hot-update.json下一次升级必须形成的hash
[id].[fullhash].hot-update.js
[runtime].[fullhash].hot-update.json
复制代码
  1. webpack-dev-server如何判断文档发生了转变

这个问题非常简单,webpack-dev-server运行的情况下,复位了express,而且把expres传送给了webpack-dev-middleware,webpack-dev-middleware也是webpack团队荣誉出品,devServer几乎全部api全是根据这一库去完成的。

webpack搭建的过程中会回到一个compiler目标,该对象会给予一个watch方式用于监视文档变更,而webpack-dev-middleware便是根据这些方式监视文档变更,
webpack.HotModuleReplacementPlugin也是一样的实际操作。而且每一次再次搭建的情况下webpack-dev-server都是会监视compiler的compile、invalid、done方式,会通告socket服务项目用以是不是展现overlay(遮罩层)。

  • compile 在compilation形成以前,compilation是webpack每一次再次编译程序所回到的一个目标
  • invalid 编译程序不成功
  • done 编译程序取得成功
  1. 怎样完成升级

webpack-dev-server在运行的过程中还会继续给entry加上2个文档

webpack-dev-server/clinet/index.js
webpack/hot/devServer.js // 假如设定了hotonly会引入webpack/hot/only-dev-server
复制代码

如今大家知道每一次搭建所形成的hash,和出现的文档,但此刻还没法热更新。我们可以纪录每一次搭建所形成的hash,用以分辨和目前的hash是不是配对,进而完成热更新,而且通告电脑浏览器开展升级。

webpack-dev-server/client/index.js承担每一次升级的情况,当状态为ok和warinings的过程中会实行一个reloadApp方式,该方法会emit一个webpackHotUpdate事情,并把变动的文档hash传送出来,随后webpack/hot/devServer.js承担监视这一事情,当监视到该情况的情况下,储存该文件hash,而且分辨hash是不是已升级而且module.hot.status为idle的情况下,实行一个check方式,check会取得一个必须发布的控制模块,如果有必须升级,则启用location.reload()方式,开展升级。

if (module.hot) {
	var lastHash;
	var upToDate = function upToDate() {
		return lastHash.indexOf(._webpack_hash__) >= 0;
	};
	var log = require(\"./log\");
	var check = function check() {
		module.hot
			.check(true)
			.then(function(updatedModules) {
				if (!updatedModules) {
					log(\"warning\", \"[HMR] Cannot find update. Need to do a full reload!\");
					log(
						\"warning\",
						\"[HMR] (Probably because of restarting the webpack-dev-server)\"
					);
					window.location.reload();
					return;
				}

				if (!upToDate()) {
					check();
				}

				require(\"./log-apply-result\")(updatedModules, updatedModules);

				if (upToDate()) {
					log(\"info\", \"[HMR] App is up to date.\");
				}
			})
			.catch(function(err) {
				var status = module.hot.status();
				if ([\"abort\", \"fail\"].indexOf(status) >= 0) {
					log(
						\"warning\",
						\"[HMR] Cannot apply update. Need to do a full reload!\"
					);
					log(\"warning\", \"[HMR] \"   log.formatError(err));
					window.location.reload();
				} else {
					log(\"warning\", \"[HMR] Update failed: \"   log.formatError(err));		}
			});
	};
	var hotEmitter = require(\"./emitter\");
	hotEmitter.on(\"webpackHotUpdate\", function(currentHash) {
		lastHash = currentHash;
		if (!upToDate() && module.hot.status() === \"idle\") {
			log(\"info\", \"[HMR] Checking for updates on the server...\");
			check();
		}
	});
	log(\"info\", \"[HMR] Waiting for update signal from WDS...\");
} else {
	throw new Error(\"[HMR] Hot Module Replacement is disabled.\");
}
复制代码

如今大家已经大约了解了热更新的全过程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月11日 上午11:06
下一篇 2022年5月11日 上午11:07

相关推荐

  • qq空间怎么发视频不压缩(5招解决上传视频不用压缩)

    上期说到上传视频不清晰的问题两点,接下来我们继续说说剩下的 三、传输过程中出现压缩 不知道大家平时是怎么上传视频的,我了解到的大多数都不是直接上传视频的,而是通过中间的一个媒介。 很多朋友都是需要讲视频从电脑上传到安卓手机的,可以用网盘和QQ作为中间的一个传输工具。 这里强调一下,不要使用微信进行中间传输,微信的压缩还是挺大的,视频的清晰度可能很快就下去了。尽可能直接就用QQ传或者是用USB数据线…

    2022年10月27日
    1710
  • 民宿网站有哪些,中国十大民宿网站排行榜

    如今,出门住民宿俨然已经成了一种新的消费习惯,尤其受到90后、00后用户的喜爱,但也有部分用户想住民宿但又不知道如何操作,这里以国内民宿预订市场主流的三家平台——ATM(爱彼迎、途家、木鸟)为例,详细介绍下整个下单流程,希望对大家有所帮助。 一般情况下,大多数用户都是在确定游玩/出行目的地之后,才会进行住宿房间的挑选。所以为了更贴近用户的实际情况,我们按照“城市筛选——房源展示——详情列表——房东…

    2022年8月23日
    470
  • 景甜种甜、雨昕助攻,聚划算垂类借势攻擂

    在眼下风口的直播带货中,免不了成为各个平台的兵家必争之地

    2022年9月4日
    420
  • 什么动物没有方向感,能答出来的都是高手

    职场是每个刚毕业的大学生,最向往的一个地方,因为在职场中,不仅可以赚很多的钱,还可以磨练自己的能力,也可以尽情的的展示自己的能力,实现自己的抱负。但是现在的职场想要进入,就必须通过一个点,那就是面试。可是面试可不是一个容易的事情,现在的面试,不仅要考察面试者的学识能力,而且还有思维能力,逻辑能力,以及一个临场的应变能力。我的一个好友,就遇到了一个这样的问题。​张文伟十几年刚毕业的研究生,他没有想他…

    2022年9月4日
    430
  • vivox7plus参数配置详情(vivox7plus手机现在价格)

    vivoX7Plus发布已经有段时间,对于这款手机想必大家已经有了不少了解。这款手机主打1600万像素柔光自拍,对于热爱拍照的人来说再合适不过。今天,就让笔者通过实拍测试,来考验下vivoX7Plus的拍照表现如何。 用实力说话vivoX7Plus拍照专项体验 vivoX7Plus是vivoX7的“同胞兄弟”,所以在拍照配置上有相似之处,比如都搭载了1600万像素前置摄像头、都支持自拍Moonli…

    2022年5月12日
    1060
  • 电脑微信聊天记录怎么查看,方法非常简单保证立马学会

    微信与QQ相比相信很多人都愿意在手机上使用微信,而在电脑上使用QQ。如果想在电脑上查看一些微信中的聊天记录,比如分享的小视频,文章链接等等该怎么操作呢。对于微信文章小编一直都是打开文章后再分享给QQ中的【我的电脑】,然后在PC版QQ上打开文章链接进行查看。 这种方法比较麻烦,近期小编发现了几个在电脑上查看微信聊天记录的方法。不管是安卓用户还是iOS用户,都可以在电脑上下载微信客户端。 如果不想下载…

    2022年7月3日
    580
  • 体验消费的特点有哪些,其四种类型介绍

    文/图乌鲁木齐晚报全媒体记者郭玲李凯  随着新零售的兴起,实体零售业逐渐突破电商冲击,通过强化体验式消费、整合线上线下资源等方式,迸发出新的活力。  连日来,记者走访发现,首府不少商家通过整合生活家居、文创IP、咖啡图书等商品资源,打造一个个温暖的生活场景,提升沉浸式消费体验,同时线上线下联动,通过消费升级带动供给优化。   注重体验:新消费模式悄然来临  12月1日正逢周末,在友好路的乐玩陶艺体…

    2022年5月30日
    4010
  • 共享纸巾机怎么挣钱,共享纸巾机加盟流程

    共享纸巾机是一种免费或收费的自助售纸形式的自助售卖机,用户只需要凭借手机微信扫一扫设备上的二维码付费或者分享朋友圈广告就可以获得一包纸巾。在市场上的共享纸巾机解决的部分市民紧急用纸的烦恼,做到了资源共享。共享纸巾机可以在火车站、商城、公共卫生间等地方投放,随时随地的纸巾售卖有效避免了上厕所没纸巾的尴尬场面,在共享纸巾机形成一定的规模后,不仅提高当地的形象,而且提升了政府的形象与社会主义价值观的宣传…

    2022年9月1日
    460
  • 小规模纳税人所得税优惠政策2019,小规模企业所得税怎么缴纳

    1.小规模10万元免增值税 2019年1月1日至2021年12月31日,增值税小规模纳税人合计月销售额不超过10万元(以1个季度为1个纳税期的,季度销售额未超过30万元)的,免征增值税。 2.企业所得税最低5%税负 2019年1月1日至2021年12月31日,对小型微利企业年应纳税所得额不超过100万元的部分,减按25%计入应纳税所得额,按20%的税率缴纳企业所得税;对年应纳税所得额超过100万元…

    2022年6月11日
    800
  • 日全食多少年一次,中国日全食历史记录

    2019年1月6日上午(农历腊月初一,癸卯日),我国中东部地区、北方大部地区可以看到“带食日出”的天象。 从全球层面上来看,本次日偏食从亚洲的日出开始,然后迅速向东移动约4.25小时,最终在阿拉斯加延伸的阿留申群岛结束。最大日食期间,最多有40%的太阳将被遮挡,最适宜观测日食的地区是北太平洋和东亚地区,包括中国北京、俄罗斯伊尔库茨克、日本东京。 椭圆阴影部分为可观测到日食的区域 一、古代说法 《春…

    2022年9月4日
    1480

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信