webpck 之(13) 优化配置 之 HMR
这里只能对 开发环境有效
1.开发环境性能优化
*优化打包构建速度 (项目体积越来越庞大,代码量太多,就会越来越慢)
*优化调试代码
2.生产环境性能优化
*优化打包构建速度
*优化代码运行的性能
HRM是需要在devServer环境下的,而生产环境是没有这个环境的,所以在生产环境无法使用HRM
为什么要用到HRM呢?
答:因为在热更新devServer设置中,通过npx webpack-dev-server 进行内存打包,
这样每次修改就不用执行webpack了,但是同样也会出现以下情况:
1/修改样式文件 : 发现js文件重新加载了,被重新打包了一次,若js文件很多呢,那么内存打包会非常慢
2.修改html文件: 会导致很多文件进行重新加载了,但是不需要考虑HRM
通过下面的修改可以极大优化打包构建速度
HRM: hot module replacement 热模块替换 / 模块热替换
作用: 一个模块发生变化,只会重新打包这一个模块(而不是打包所有模块)
极大提升构建速度
样式文件:可以使用HMR功能:因为style-loader内部实现了,需要设置 devServer中hot:true
js文件: 默认不能使用HRM功能,如何解决呢?
在index.js中,利用 module.hot 以及 module.hot.accept('..js',function(){}) 来监听js文件的变化来执行回调函数
js的HRM只是针对非入口js文件进行热模块替换 但是修改的是入口文件,就其他的js都要重新加载
html文件: 默认不能使用HMR功能,同时会导致问题,html文件不能热更新了 (不需要做HMR功能,因为html只有这一个页面,即使做了HRM功能页无效)
解决: 修改entry入口 代码: entry:['./src/js/index.js', './src/index.html'] 但是这样做只是解决了html修改后,页面没有变化的问题, 而且修改html文件后,发现js等文件全部重新加载了
webpack.config.js文件 cssHRM很简单的配置 hot
devServer:{ contentBase:resolve(__dirname,'build'), compress:true, port:3000, open:true,
// 开启HMP功能
//当修改了webpack配置,新配置要想生效,必须从新webpack服务 hot:true }
index.js 文件 利用 module.hot等内容实现HRM
const print = require('print') //注:print.js只有一个print()函数方法 print() //在index.js中调用print.js的方法 if(module.hot) { module.hot.accept('./print.js',function(){ //方法会监听 print.js文件的变化,一旦发生变化,其他模块不会打包重构 //会执行后面的回调函数 print() }) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2019-04-28 HTML 转 PDF的两种实现方式