文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
八、模块热替换提高开发效率
HMR
全称是 Hot Module Replacement
,即模块热替换。在这个概念出来之前,我们使用过 Hot Reloading
,当代码变更时通知浏览器刷新页面,以避免频繁手动刷新浏览器页面。HMR 可以理解为增强版的 Hot Reloading
,但不用整个页面刷新,而是局部替换掉部分模块代码并且使其生效,可以看到代码变更后的效果。所以, HMR
既避免了频繁手动刷新页面,也减少了页面刷新时的等待,可以极大地提高前端页面开发效率…
8.1 配置使用 HMR
HMR
是 webpack
提供的非常有用的一个功能,跟我们之前提到的一样,安装好 webpack-dev-server
, 添加一些简单的配置,即在 webpack
的配置文件中添加启用 HMR
需要的两个插件
const webpack = require('webpack') module.exports = { // ... devServer: { hot: true // dev server 的配置要启动 hot,或者在命令行中带参数开启 }, plugins: [ // ... new webpack.NamedModulesPlugin(), // 用于启动 HMR 时可以显示模块的相对路径 new webpack.HotModuleReplacementPlugin(), // Hot Module Replacement 的插件 ], }...
8.2 module.hot 常见的 API
前面 HMR
实现部分已经讲解了实现 HMR 接口的重要性,下面来看看常见的 module.hot
API
有哪些,以及如何使用
module.hot.accept
方法指定在应用特定代码模块更新时执行相应的callback
,第一个参数可以是字符串或者数组,如
if (module.hot) { module.hot.accept(['./bar.js', './index.css'], () => { // ... 这样当 bar.js 或者 index.css 更新时都会执行该函数 }) }...
module.hot.decline
对于指定的代码模块,拒绝进行模块代码的更新,进入更新失败状态,如module.hot.decline('./bar.js')
。这个方法比较少用到module.hot.dispose
用于添加一个处理函数,在当前模块代码被替换时运行该函数,例如
if (module.hot) { module.hot.dispose((data) => { // data 用于传递数据,如果有需要传递的数据可以挂在 data 对象上,然后在模块代码更新后可以通过 module.hot.data 来获取 }) }...
module.hot.accept
通常用于指定当前依赖的某个模块更新时需要做的处理,如果是当前模块更新时需要处理的动作,使用module.hot.dispose
会更加容易方便module.hot.removeDisposeHandler
用于移除dispose
方法添加的callback
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论