肉烂在锅里

个人站

我是软件研发中心培训主管,我喜欢看动漫,学习web前端开发。


Webpack HMR自动修改js效果

Webpack HMR自动修改js效果

上次说道HMR修改css文件可实时的反应当前页面渲染而不作出任何的浏览器刷新。

但是对于Js文件就无法做到这一点。那么这次就专门对js的HMR作出探究。

一、js默认HMR无效的例子

同样是打开HMR,如果修改了Js代码是不会自动改变的。

实验过程如下:

1、部署基本逻辑

TIP:

为了清晰的描述不刷新浏览器的过程,特引入了count()方法,他的作用是点击7000上面的那个数字会自动递增。现在点击了13次,显示蜀滋味13。如果此处刷新浏览器13将重置为0。

2、修改number.js;

3、不刷新浏览器。再回来看一眼浏览器变化

如果此时js有HMR的能力,那么会在不刷新浏览器的情况下,13自动变化为1000。可是现在并没有变化,说明js目前还不支持HMR。(注意13没变化,说明我们没有刷新浏览器!)

二、使用HMR的相关API让js也热更新起来

webpack的HMR并非不支持js文件。webpack为我们提供了很多关于HMR的接口,让我们自行实现热更新的逻辑。为了解决js热更新的这个问题,我们需要对文件的改变做出一个监听,同时给予监听的逻辑。

在index.js下:

在这里需要注意的是,修改了index.js,根据浏览器控制台的提示信息,需要reload整个文件。因此重新npm run start; 之后就可以实现多次点击上面的数字,修改number.js还能保证在不刷新浏览器的情况下更新下面的数字,而不影响上面点击后的数字。

但是在一些高级的框架中,比如Vue,vue-loader已经帮我们写好了module.hot.accept的部分了。

其实在我们更改sass和css文件的时候也会触发module.hot.accept方法。只不过是webpack内部已经帮我们实现了相关逻辑,这也就是为什么HMR默认对css等样式文件起效的原因。所以一般情况下不需要重新编写。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦