资讯专栏INFORMATION COLUMN

React技术栈——HotModuleReplacement

william / 3029人阅读

摘要:如果检测到文件变化,会重新构建被改变的文件。另外,被改变的模块被发送到,用来做热替换。首先检查,被更新的模块能否指是否被跟踪询问实例是否有更新。如果有更新,实例会异步下载更新代码,并通知已经准备就绪。参考资料官方文档官方同事的总结

Hot Module Replacement是webpack下实现热刷新的模块,由于webpack的坑爹文档,看了很久才搞明白这东西怎么用。

Webapck的热刷新用起来很爽,连续写一个下午,一次刷新都不用,体验棒棒哒。

实现热刷新的主要是HOT MODULE REPLACEMENT(HMR)模块

官方文档很坑爹,反正我是看的懵懵懂懂的。官方wiki讲的稍微好些,不过原理多一些

How does it works?


Webpacks adds a small HMR runtime to the bundle, during the build process, that runs inside your app. When the build completes, Webpack does not exit but stays active, watching the source files for changes. If Webpack detects a source file change, it rebuilds only the changed module(s). Depending on the settings, Webpack will either send a signal to the HMR runtime, or the HMR runtime will poll webpack for changes. Either way, the changed module is sent to the HMR runtime which then tries to apply the hot update. First it checks whether the updated module can self-accept. If not, it checks those modules that have required the updated module. If these too do not accept the update, it bubbles up another level, to the modules that required the modules that required the changed module. This bubbling-up will continue until either the update is accepted, or the app entry point is reached, in which case the hot update fails.

在构建时,webapck添加一个小的HMR实例到bundle内部,当构建完成后,webpack不再存在但保持监控源文件。如果webpack检测到文件变化,会重新构建被改变的文件。根据设置,webpack要么发送一个信号给HMR实例,要么检查webpack的变化。另外,被改变的模块被发送到HMR runtime,用来做热替换。首先检查,被更新的模块能否self-accept【指是否被HMR跟踪】?
From the app view
The app code asks the HMR runtime to check for updates. The HMR runtime downloads the updates (async) and tells the app code that an update is available. The app code asks the HMR runtime to apply updates. The HMR runtime applies the update (sync). The app code may or may not require user interaction in this process (you decide).

app询问HMR实例是否有更新。如果有更新,HMR实例会异步下载更新代码,并通知app已经准备就绪。app源码请求HMR实例开始更新。HMR实例同步更新。app可以选择是否和用户交互。

From the compiler(webpack) view

待续。。。

参考资料:

【1】官方文档

【2】官方wiki

【3】同事的总结

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79910.html

相关文章

  • Webpack HMR 原理解析

    摘要:在过程中会利用简称中的两个方法和。是通过请求最新的模块代码,然后将代码返回给,会根据返回的新模块代码做进一步处理,可能是刷新页面,也可能是对模块进行热更新。该方法返回的就是最新值对应的代码块。 Hot Module Replacement(简称 HMR) 包含以下内容: 热更新图 热更新步骤讲解 showImg(https://segmentfault.com/img/remote...

    Ververica 评论0 收藏0
  • React技术实现XXX点评App demo

    摘要:项目的架构也是最近在各种探讨研究。还求大神多指点项目技术总结技术栈项目结构探究初体验关于项目中的配置说明项目简单说明开发这一套,我个人的理解是体现的是代码分层职责分离的编程思想逻辑与视图严格区分。前端依旧使用技术栈完成。 项目地址:https://github.com/Nealyang/R...技术栈:react、react-router4.x 、 react-redux 、 webp...

    wslongchen 评论0 收藏0
  • 你想要的全平台全开源项目-Vue、React、小程序、安卓、ReactNative、java后端

    摘要:无论你是前端后端移动端开发人员,或是设计师产品经理,都可以在平台上发布项目,与志同道合的小伙伴一起协作完成项目。 全平台全栈开源项目 coderiver 今天终于开始前后端联调了~ 首先感谢大家的支持,coderiver 在 GitHub 上开源两周,获得了 54 个 Star,9 个 Fork,5 个 Watch。 这些鼓励和认可也更加坚定了我继续写下去的决心~ 再次感谢各位大佬! ...

    Maxiye 评论0 收藏0
  • 使用react技术完全重写一个vue书城项目

    摘要:本项目是在之前一个项目基础上,用技术栈重写的一个书城项目版本地址本项目地址预览地址项目说明本项目是一个构建的移动书城项目,数据是通过爬虫爬取,存储在中,项目通过构建,前端部分是技术栈。 本项目是在之前一个vue项目基础上,用react技术栈重写的一个书城项目 vue版本地址 本项目地址 预览地址 项目说明 本项目是一个react + nodejs + mysql构建的移动书城项目,...

    aaron 评论0 收藏0
  • [ 一起学React系列 -- 0 ] React技术学习路线

    摘要:的出现真可谓是前端界的福音,正与之宗旨所说,。据统计,目前世界上有的项目使用了。技术栈学习路线直到前段时间笔者的朋友给推荐了一个,真是欣喜若狂也更加坚定了自己在继续前进的想法。这是一个外国友人总结的一套技术栈学习路线,先给传送门。 我相信点进来的同学都是冲着标题来的,当然本文也不会让各位失望。不过在正式介绍标题所述的内容之前,我们不妨先放下技术,一起回顾下自己做前端技术的心路历程。 前...

    Java3y 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<