当前位置: 代码网 > it编程>编程语言>Javascript > webpack热更新的原理及实现

webpack热更新的原理及实现

2024年07月05日 Javascript 我要评论
刷新分为两种:一种是页面刷新,不保留页面状态,就是简单粗暴,直接window.location.reload();另一种只需要局部刷新页面上发生变化的模块,同时可以保留当前的页面状态,比如复选框的选中

刷新分为两种:一种是页面刷新,不保留页面状态,就是简单粗暴,直接window.location.reload();另一种只需要局部刷新页面上发生变化的模块,同时可以保留当前的页面状态,比如复选框的选中状态、输入框的输入等。

webpack热更新( hot module replacement,简称 hmr,后续均以 hmr 替代),无需完全刷新整个页面的同时,更新代码变动的模块,是 webpack 内置的最有用的功能之一。

hmr 的好处,在日常开发工作中体会颇深:节省宝贵的开发时间、提升开发体验。引用官网的描述来概述一下:

hmr 功能会在应用程序运行过程中,替换、添加或删除模块,而无需重新加载整个页面。主要是通过以下几种方式,来显著加快开发速度:

  • 保留在完全重新加载页面期间丢失的应用程序状态。
  • 只更新变更内容,以节省宝贵的开发时间。
  • 在源代码中对 css / js 进行修改,会立刻在浏览器中进行更新,这几乎相当于在浏览器 devtools 直接更改样式。

1. 热更新原理

webpack 的热模块替换(hot module replacement,hmr)是一种在不完全刷新页面的情况下更新应用代码的技术,从而提高了开发效率。以下是 hmr 的核心原理:

步骤描述
1开发者使用 webpack-dev-server 启动本地开发服务器,提供静态文件服务并支持 websocket 实时通信。
2webpack-dev-server 构建应用时,在输出的 javascript 文件中注入 hmr 运行时代码,处理更新通知。
3webpack 配置 watch 模式,监听源代码文件变化,发现变化后开始重新编译。
4编译完成,新模块版本生成并存储在内存,启用 hmr 时不刷新页面,准备更新包。
5通过 websocket 长连接,webpack-dev-server 通知客户端哪些模块有更新。
6hmr 运行时尝试应用更新,调用模块的 hmr 接口,替换旧模块实例(若支持)。
7模块可接受或拒绝更新,有副作用则拒绝并提示手动刷新。
8更新失败,webpack 运行时回滚到之前状态,避免应用崩溃。
9对于不支持 hmr 或无法更新的模块,开发者可选择手动刷新页面。

2. 热更新配置

启用 webpack 的 模块热替换 特性:

webpack.config.js

module.exports = {
  //...
  devserver: {
    hot: true,
  },
};

通过命令行使用:

npx webpack serve --hot

如需禁用:

npx webpack serve --no-hot

启用模块热替换功能,在构建失败时不刷新页面作为回退,使用 hot: 'only'

webpack.config.js

module.exports = {
  //...
  devserver: {
    hot: 'only',
  },
};

通过命令行使用:

npx webpack serve --hot only

提示
从 webpack-dev-server v4 开始,hmr 是默认启用的。它会自动应用 webpack.hotmodulereplacementplugin,这是启用 hmr 所必需的。因此当 hot 设置为 true 或者通过 cli 设置 --hot,你不需要在你的 webpack.config.js 添加该插件。

到此这篇关于webpack热更新的原理及实现的文章就介绍到这了,更多相关webpack热更新内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com