webpack中的热刷新与热加载的区别


Posted in Javascript onApril 09, 2018

webpack非常的强大,合理的脚手架可以为我们的工作省去众多繁琐无意义的工作。其中热刷新、热加载相较于传统开发大大提高了开发节奏。

从脚手架发现热刷新、热加载的差异

相信大部分的vue开发者都是从vue-cli开始的,很多初学者欢快的跑着vue项目却不敢改随意改变vue-cli的配置(毕竟webpack确实很复杂,vue-cli也做了很多工作来优化初学者的体验)。

相比之下react没有提供一个比较健壮的脚手架了(至少没有明显地被我找到,望赐教)。据我知一个是yeoman的 generator-react-webpack、react的create-react-app,还有一个不错的react-starter-kit (热加载,而且集成了非常多代码,参考性很高)。
在学习react时我就发现了上文提到的react前两个脚手架提供的是热刷新而非热加载。

简单的区分热加载与热刷新:

热刷新:文件内动改动后,整个页面刷新,不保留任何状态(比如输入过内容的Input表单),相当于webpack帮你摁了F5刷新
热加载:文件改动后,以最小的代价改变被改变的区域。尽可能保留改动文件前的状态(对input输入内容后,修改其他标签的代码)

这在虽然两者相较于传统开发(手动F5)都提升了开发体验,但两者之间的依旧很大,尤其是当项目变得愈发复杂之后,我们必须一劳永逸的解决这个问题(留出更多的时间来开发bug)。

动手修改

从头配置就是另一个领域了,所以我们直接从vue-cli开始改动。

下述步骤仅列出关键做启发参考,详细请参考最后github完整项目

  1. 删除vue相关的依赖、文件等;整个scr内的东西都可以删掉
  2. package.json依赖加入babel-loader webpack-dev-server react-hot-loader(最关键)
  3. package.json命令行设置 "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
  4. webpack.base.conf 添加.jsx文件需要经过babel-loader处理,配置options:{plugins:['react-hot-loader/babel']}
  5. .babelrc presets加入react,下方加入plugins:['react-hot-loader/babel']
  6. src文件夹下创建main.js(起名要跟webpack配置的入口文件一致)
import 'core-js/fn/object/assign';
import React from 'react';
import ReactDOM from 'react-dom';
import { hot } from 'react-hot-loader';

import App from './pages/App'; // 自己写吧
import './assets/css/reset.scss';

// Render the main component into the dom
ReactDOM.render(<App/>, document.getElementById('app'));

export default hot(module)(App); // 热加载的关键

至此,我们就可以愉快地使用react体验热加载的快♂感了~

问题所在

其实在简单地修改vue-cli中的main.js文件为react相关代码(别忘了配置babel处理jsx)并依旧是热刷新。

经过本地代码观察对比后,发现了一个吸引人的名字:

在webpack.dev.conf文件中:

new webpack.HotModuleReplacementPlugin()

网上查询后得知这是实现热加载的关键,它需要代码本身具备模块化的性质(这意味着只要像三大框架这样可编写可复用组件的框架都能利用这个性质),这样才可以通过插♂拔代码实现热加载。

而react的jsx特效不是HotModuleReplacementPlugin能搞定的只能老老实实热刷新了。

在这种情况下react-hot-loader呼之欲出。配合官方的使用方法,就能继续使用热加载了。

ps: 仅做参考,react的很多代码我也处于探索与学习中

配置好的项目地址:gayhub

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
浅析js中取绝对值的2种方法
Jul 09 Javascript
JavaScript自定义事件介绍
Aug 29 Javascript
JS实现图片翻书效果示例代码
Sep 09 Javascript
js处理表格对table进行修饰
May 26 Javascript
基于jquery实现动态竖向柱状条特效
Feb 12 Javascript
js控住DOM实现发布微博效果
Aug 30 Javascript
jQuery查找节点方法完整实例
Sep 13 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
Sep 26 Javascript
Angularjs单选框相关的示例代码
Aug 17 Javascript
JS跳转手机站url的若干注意事项
Oct 18 Javascript
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
Oct 21 Javascript
vue写一个组件
Apr 09 #Javascript
Vue 中使用 CSS Modules优雅方法
Apr 09 #Javascript
JS中双击和单击事件冲突的解决方法
Apr 09 #Javascript
vue脚手架及vue-router基本使用
Apr 09 #Javascript
vue 设置proxyTable参数进行代理跨域
Apr 09 #Javascript
Angular入口组件(entry component)与声明式组件的区别详解
Apr 09 #Javascript
快速搭建vue2.0+boostrap项目的方法
Apr 09 #Javascript
You might like
用PHP实现将GB编码转换为UTF8
2006/11/25 PHP
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python模块WSGI使用详解
2018/02/02 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
详解numpy的argmax的具体使用
2019/05/27 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
应届生求职信写作技巧
2013/10/24 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
2014年党建工作总结
2014/11/11 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
卫生主题班会
2015/08/14 职场文书