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 相关文章推荐
求解开jscript.encode代码的asp函数
Feb 28 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
javascript针对DOM的应用实例(一)
Apr 15 Javascript
YUI Compressor压缩JavaScript原理及微优化
Jan 07 Javascript
jquery实现右键菜单插件
Mar 29 Javascript
js带闹铃功能的倒计时代码
Sep 29 Javascript
微信小程序 toast 详解及实例代码
Nov 09 Javascript
JS 对java返回的json格式的数据处理方法
Dec 05 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
Node.js 8 中的重要新特性
Jun 28 Javascript
vue实现整屏滚动切换
Jun 29 Javascript
微信小程序实现天气预报功能(附源码)
Dec 10 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中3种方法删除字符串中间的空格
2014/03/10 PHP
Web程序工作原理详解
2014/12/25 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python进程间通信用法实例
2015/06/04 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
Python使用进程Process模块管理资源
2020/03/05 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
污水厂厂长岗位职责
2014/01/04 职场文书
上班玩手机检讨书
2014/02/17 职场文书
中学生操行评语大全
2014/04/24 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
个人四风对照检查材料
2014/09/26 职场文书
卖房协议书样本
2014/10/30 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技
python中mongodb包操作数据库
2022/04/19 Python
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js