webpack面试题(二)

200 阅读2分钟

这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战

webpack的热更新

刷新分为两种情况:

  • 页面刷新,不保留页面状态,直接window.location.reload()
  • 另一种是基于WDS (Webpack-dev-server)的模块热替换,只需要局部刷新页面上发生变化的模块,同时可以保留当前的页面状态,比如复选框的选中状态、输入框的输入等。

理解热更新

热更新,是指 Hot Module Replacement,缩写为 HMR使得应用在运行状态下,不重载刷新就能更新、增加、移除模块的机制

webpack的热更新使得当我们修改了代码,不会导致页面刷新,而是在保留现有的数据状态基础上,只将模块进行更新替换。这样既保留了现有的数据状态,又能看到代码修改后的变化。热更新也叫模块热替换HMR - Hot Module Replacement)是 webpack 提供的最有用的功能之一。即允许在运行时替换,添加,删除各种模块,而无需进行完全刷新重新加载整个页面。

模块热更新(热替换),其目的是为了加快用户的开发速度,提高编程体验。它并不适用于生产环境,这意味着它应当只在开发环境使用

热更新实现方式有:

  • 保留在完全重新加载页面时丢失的应用程序的状态
  • 只更新改变的内容,以节省开发时间
  • 调整样式更加快速,几乎等同于就在浏览器调试器中更改样式

启用HMR配置方式

webpack.config.js配置文件中做下面几件事:

  1. 引入webpack库
  2. 使用HotModuleReplacementPlugin 插件: new webpack.HotModuleReplacementPlugin()
  3. 打开 webpack-dev-server 的热更新开关: 设置devServer选项中的hot字段为true

其中HotModuleReplacementPlugin 插件是 Webpack 自带的,webpack.config.js 中使用HotModuleReplacementPlugin 插件:

module.exports = {
  // ...
  plugins: [
    webpack.HotModuleReplacementPlugin(),
   // ...
  ]
}

打开 webpack-dev-server 的热更新开关: 设置devServer选项中的hot字段为true

// webpack.config.js
module.exports = {
  // ...
  devServer: {
    hot: true,
    // ...
  }
}

热更新优点:

  • 加载页面时保存应用程序状态
  • 只更新改变的内容,节省调试时间
  • 修改样式更快,几乎等同于在浏览器中更改样式

参考:

www.jianshu.com/p/45c150c4a…

www.jianshu.com/p/2806aa5c0…