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

相关推荐

  • 服务器干什么用的,简述服务器的功能及作用

    Web服务器是指在网络环境下提供网络信息浏览服务的某类计算机程序。Web服务器一般可以为向其发出请求的浏览器等Web客户端提供文档、网站文件或者数据文件。Web服务器是目前使用范围最广的服务器之一,是推进世界信息迅速流动的主要原因之一。 Web服务器简介 Web服务器通常是指网站服务器,也被称为WWW(WORLDWIDEWEB)服务器。因为目前WWW是互联网中的多媒体查询工具,在目前发展最快使用量…

    2022年7月28日
    950
  • 工兵铲价格多少(公认质量最好的工兵铲)

    工兵铲是用上好淬火高碳钢制作而成,它是军人必备的军事装备之一,主要用于构筑各种掩体和工事,也可作为武器和敌人进行拼杀,很多时候它还能作为做菜的工具来使用。 ​ 俄罗斯军队是配备工兵铲最早的国家之一,他们还研究出了多种使用办法,而把工兵铲当飞刀来用是俄军的一大特色。 ​ 据俄罗斯消息报,俄军已经生产出一种新型的工兵铲,除了保持基本功能外,在使用过程中它可以变成一把锄头,一把斧头,甚至一是把钳子。 ​…

    2022年10月25日
    680
  • 电商模式有哪几种,电子商务5种盈利模式

    淘宝网 淘宝网是亚太地区较大的网络零售、商圈,由阿里巴巴集团在2003年5月创立。淘宝网是中国深受欢迎的网购零售平台,拥有近5亿的注册用户数,每天有超过6000万的固定访客,同时每天的在线商品数已经超过了8亿件,平均每分钟售出4.8万件商品。 截止2011年年底,淘宝网单日交易额峰值达到43.8亿元,创造270.8万直接 且充分就业机会。随着淘宝网规模的扩大和用户数量的增加,淘宝也从单一的C2C网…

    2022年6月12日
    1240
  • 如何推广自己的产品,新产品推向市场四步法

    没钱没资源,怎么做活动运营?先说结论:明确各方供需和诉求,整合内外部资源(反复撬动),构建资源生态,从而扩大活动的影响力。 说白了,就是需要用你手上仅有的1份资源,去撬动外部的2分资源,再通过新增的外部资源,向老板申请增加3分内部资源,再打包整体的6分资源,去撬动外部的其他资源。通过资源的反复撬动和打包,构建出足够大的资源池,通过这个资源池来扩大活动的传播力和影响力。 是不是有点绕?我们先拿一个耳…

    2022年6月8日
    590
  • 投影仪大小有什么区别,投影画面尺寸调整教程

    在家用投影机领域,大家都有一个共识就是每台家用投影机的好画质都是调出来。简单来说,要想展现每台家用投影机的最好画质,都需要专业人士通过专业工具和软件进行调校。而且调校是不分档次,不分机型,所有的家用投影机在实际使用时都是需要调校的。不同档次的家用投影机调校的差别在于调校程度或者难易度不同而已。今天,我就来简单讲讲如何利用《色彩极致3(ChromaPure3)》这一软件对家投影机进行调校。 �f7�…

    2022年7月11日
    890
  • 关掉icloud照片没了怎么恢复,教你一招快速恢复icloud照片

    iPhone手机里的「iCloud照片图库」可以将照片和视频都上传到iCloud云端,节省手机内存空间。 但也有人烦恼,不小心关闭了这个「iCloud照片图库」,本地照片就消失了。 今天,A君就来说说如何从iCloud上恢复丢失的照片。 首先,打开「设置」,点击「AppleID」,进入「iCloud」,你会看到「管理储存空间」一栏。 点击进去,你能看到iCloud的「照片」没有丢失。 这时进入「照…

    2022年7月31日
    1.3K0
  • 计算机性能怎么测试,分享一个完整的性能测试流程

    新电脑买到手,如何才能方便的检查并测试自己的电脑性能呢?小Z今天就详细的给大家捋一捋,作为一名普通用户,在不需要花钱购买昂贵正版软件,也不用去冒着风险下载盗版软件的情况下,如何不花一分钱,快速方便详尽的检查并测试你的电脑性能。 硬件信息检查 推荐工具:steam 拿到新机器的第一步自然是要检查电脑和自己所购买的产品是不是货不对板了,在这里小Z强烈推荐steam自带的系统信息检测,检测内容非常详尽。…

    2022年10月6日
    1480
  • 域名解析错误怎么解决,域名解析错误原因及解决方法

    许多不太懂网站的人碰见域名解析出现问题时,往往无从下手,不知道该如何解决。其实,通过四个步骤的排查,基本可以确定问题所在。 域名解析常见的4个错误及解决方法! 一、解析问题 在开始菜单下“开始”、“运行”,输入cmd,敲回车,输入ping+空格+域名,再敲回车,如果下面没有出现IP,那么就是解析问题,这个时候需要联系注册商询问原因,让他们帮忙解决。 如果可以显示IP,那么就需要检查一下IP是否对应…

    2022年6月25日
    640
  • win10输入法切换不出来怎么办,Win10无法切换输入法解决方法

    我们知道,Win10系统输入法之间的切换,可以使用快捷键Ctrl+空格。但是,一些win10系统的用户反映说:按下该组快捷键之后,Win10系统输入法没有反应,出现了Win10系统输入法切换不了的状况。那么,Win10系统输入法切换不了该怎么办呢?一起来看看小编给大家分享的Win10系统输入法切换不了的解决方法! 输入法 Win10系统输入法切换不了的解决方法: 1.很多人虽然看到这里有输入法,但…

    2022年8月6日
    540
  • 创业交流平台哪个好,简述成立创业交流平台的意义

    国青年报客户端 中国青年报客户端讯(中国青年报·中国青年网见习记者石佳)11月9日下午,2019全国大学生创新创业峰会在北京理工大学举办。本届峰会以“精益创新 智启未来”为主题,关注创新,深度挖掘创新创业人才及项目,为全国大学生搭建创新创业交流合作平台。众多在校大学生、优秀创业青年参加活动并与创业导师共同探讨。 营造有利于创新创业的发展环境是社会各界的责任,本届峰会是在前三届基础上的进一步升级,力…

    2022年7月18日
    690

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信