webpack很是的强大,合理的脚手架能够为咱们的工做省去众多繁琐无心义的工做。其中热刷新、热加载相较于传统开发大大提升了开发节奏。css
相信大部分的vue开发者都是从vue-cli
开始的,不少初学者欢快的跑着vue项目却不敢改随意改变vue-cli的配置(毕竟webpack确实很复杂,vue-cli
也作了不少工做来优化初学者的体验)。vue
相比之下react没有提供一个比较健壮的脚手架了(至少没有明显地被我找到,望赐教)。据我知一个是yeoman的 generator-react-webpack
、react的create-react-app
,还有一个不错的react-starter-kit (热加载,并且集成了很是多代码,参考性很高)。react
在学习react
时我就发现了上文提到的react前两个脚手架提供的是热刷新
而非热加载
。webpack
简单的区分热加载与热刷新:git
- 热刷新:文件内动改动后,整个页面刷新,不保留任何状态(好比输入过内容的Input表单),至关于webpack帮你摁了F5刷新
- 热加载:文件改动后,以最小的代价改变被改变的区域。尽量保留改动文件前的状态(对input输入内容后,修改其余标签的代码)
这在虽然二者相较于传统开发(手动F5)都提高了开发体验,但二者之间的依旧很大,尤为是当项目变得愈发复杂以后,咱们必须一劳永逸的解决这个问题(留出更多的时间来开发bug)。github
从头配置就是另外一个领域了,因此咱们直接从vue-cli
开始改动。web
下述步骤仅列出关键作启发参考,详细请参考最后github完整项目vue-cli
scr
内的东西均可以删掉package.json
依赖加入babel-loader
webpack-dev-server
react-hot-loader
(最关键)package.json
命令行设置 "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
webpack.base.conf
添加.jsx
文件须要通过babel-loader
处理,配置options:{plugins:['react-hot-loader/babel']}
.babelrc
presets
加入react
,下方加入plugins:['react-hot-loader/babel']
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
体验热加载的快♂感了~json
其实在简单地修改vue-cli
中的main.js
文件为react相关代码(别忘了配置babel处理jsx)并依旧是热刷新。bash
通过本地代码观察对比后,发现了一个吸引人的名字:
在webpack.dev.conf文件中:
new webpack.HotModuleReplacementPlugin()
复制代码
网上查询后得知这是实现热加载的关键,它须要代码自己具有模块化的性质(这意味着只要像三大框架这样可编写可复用组件的框架都能利用这个性质),这样才能够经过插♂拔代码实现热加载。 而react
的jsx
特效不是HotModuleReplacementPlugin
能搞定的只能老老实实热刷新了。 在这种状况下react-hot-loader
呼之欲出。配合官方的使用方法,就能继续使用热加载了。
ps: 仅作参考,react的不少代码我也处于探索与学习中 配置好的项目地址:gayhub