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 相关文章推荐
用正则xmlHttp实现的偷(转)
Jan 22 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
May 23 Javascript
解析Javascript中大括号“{}”的多义性
Dec 02 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
Mar 22 Javascript
使用node.js 获取客户端信息代码分享
Nov 26 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
Dec 18 Javascript
js实现可旋转的立方体模型
Oct 16 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
Dec 24 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
老生常谈javascript的面向对象思想
Aug 22 Javascript
Antd下拉选择,自动匹配功能的实现
Oct 24 Javascript
vue 避免变量赋值后双向绑定的操作
Nov 07 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
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
Python单元和文档测试实例详解
2019/04/11 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
python爬虫增加访问量的方法
2019/08/22 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
企业优秀团员事迹材料
2014/08/20 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
先进个人事迹材料
2014/12/29 职场文书
学习雷锋主题班会
2015/08/14 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
Tomcat配置访问日志和线程数
2022/05/06 Servers