webpack中启动了模块热替换,也是全网页刷新,不是局部更新!
这两天在研究react-hot-loader如何应用在react的项目中,之前webpack.dev.config.js配置中,设置了devServer: { hot: true, ... },plugins: [ new Webpack.HotModuleReplacementPlugin(), ... ],更改了js/jsx 文件都是全网页刷新,开始以为这就是热更新,且满足现状。而且修改了css/less文件后页面不会刷新,需要手动刷新样式才会生效,觉得不应该手动刷新但是也没去找原因为什么会这样【i 服了me】。
想提高开发效率,于是安装react-hot-loader,看了网上别人写的博客,以及官网后,需要配置webpack,我没做配置(其实配置了也管用,只是配置后我的eslint检验变的更严厉了),直接在项目路由文件中使用:
import { hot, setConfig } from 'react-hot-loader'; const Routes = () => {} ; export default hot(module)(Routes);
为什么不在app.js 入口文件中使用呢?因为入口文件中使用了<Router history={history}></Router>,在入口文件中使用react-hot-loader出现警告:You cannot change <Router history>;
再说一下,安装react-hot-loader后webpack以及.babelrc没做任何配置,直接在路由文件中使用了。且生效了。
但是,修改css/less 文件后,还是需要手动刷新页面样式才会生效,此时还是不知道啥原因。后来在网上看到这篇章才然大悟使用react-hot-loader的一些问题,原来是我的webpack配置在开发环境中抽离了css(一般在生产环境中进行抽离),于是进行了修改:
修改的意思是将样式文件也打包到js中,然后,然后修改了css/less 文件的样式后页面元素局部刷新了。后来发现即使不添加react-hot-loader,将css/less打包进js后,修改样式文件页面也会热更新的。
对于上面遇到的问题,主要是自己学的浅,没深入研究问题导致的,不说了,继续学习吧!