修改html时webpack热更新,webpack热更新(HMR)
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
一、HMR介绍
在我们开发react应用的时候,在配置了webpack-dev-server的前提下每一次的组件内容修改都需要手动的刷新浏览器,为了解决这个问题,所以有了热更新这个概念,网上的文章弄得我一头雾水,在我配置成功后,自己来记录一下热更新的配置
时隔三个月今天发现了配置更简单的热替换的方法,点我查看
二、配置
1.从零开始–项目初始化
首先创建一个基本的react的项目,然后命令行运行 npm init 生成 package.json 文件。
新建 build,client 文件夹,分别用来存放 webpack 配置(webpack.config.js文件)和 react 组件。
当前目录结构:
目录结构
2.基本的webpack配置
为了自动产出html文件,安装 html-webpack-plugin
为了解析 react 组件和对es6的解析,安装 babel-loader babel-core babel-preset-es2015 babel-preset-es2015-loose babel-preset-react 模块,并在根目录新建文件 .babelrc 文件 babel 的配置文件
.babelrc
此时 package.json 文件的包
package.json
添加 webpack-devserver 配置,此时 webpack-config.js 配置如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41const path=require('path');
const HtmlWebpackPlugin=require('html-webpack-plugin');
module.exports={
entry: {
app:path.join(__dirname,'../client/app.js')
},
output:{
filename:'[name].[hash].js',
path:path.join(__dirname,'../dist'),
publicPath:'/public/'
},
module:{
rules:[
{
test:/.(jsx|js)$/,
loader:'babel-loader',
exclude:path.join(__dirname,'../node_modules')
}
]
},
plugins:[
new HtmlWebpackPlugin()
],
devServer:{
host:'0.0.0.0',
port:'8888',
contentBase:path.join(__dirname,'../dist'),
/*显示错误信息*/
overlay:{
errors:true
},
/*因为上面的publicPath:'/public/',所以访问的所有路径都要加上public*/
publicPath:'/public/',
historyApiFallback:{
/*如果页面404则返回下面配置的页面*/
index:'/public/index.html'
}
}
}
此时启动webpack-dev-server后,运行成功
package.json
友情提示::如果在执行命令的过程中报错 ‘cannot find …’ 这类的错误,首先检查是否少装了包,如果没有少装,则删除 node_module文件夹,重新安装下。
如果运行 webpack-dev-server 启动服务器的时候,网页的 js 文件显示404,首先检查是否本地已经有了一个编译好的 dist 文件夹,因为webpack-dev-server会优先读取本地文件,配置的时候我们添加了 /pubilc/ 所以是读取不道德,这时,删除本地 dist文件夹即可。(这个相当相当的坑)
在入口文件中,我这样写 document.body 是不可取的,正确的做法是 获取Id的形式。
知识点!( 敲黑板 ):path.join 和 path.resolve 区别path.join:拼接地址(会正确使用当前系统的路径分隔符,Unix系统是/,Windows系统是)
比如:path.join(‘m’,’/b’) 或者 path.join(‘m’,’b’) 返回m/b这个路径
path.resolve:将参数转换为绝对路径
比如 path.resolve(‘m’) ;如果当前命令窗口是在c盘打开的,那么返回C:m(总是返回一个绝对路径)
对比:两种方法都可以获得当前目录的绝对路径(通过__dirname),因为path.join可以适应unix和windows,所以join可能好一些
三、重头戏-配置HMR
这里说是简单,但我觉得对于初次使用还是比较繁琐,整理一下,分为下面几个步骤(与顺序无关)安装 react-hot-loader
配置 babelrc 文件
配置 入口文件app.js
配置 webpack.config.js
2.配置 .babelrc 文件
.babelrc
3. 配置 入口文件app.js
4. 配置 webpack.config.js
改动部分标记为 //add1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48const path=require('path');
const HtmlWebpackPlugin=require('html-webpack-plugin');
const webpack=require('webpack');//add
module.exports={
entry: {
app:[
'react-hot-loader/patch',//add
path.join(__dirname,'../client/app.js')
]
},
output:{
filename:'[name].[hash].js',
path:path.join(__dirname,'../dist'),
publicPath:'/public/'
},
module:{
rules:[
{
test:/.(jsx|js)$/,
loader:'babel-loader',
exclude:path.join(__dirname,'../node_modules')
}
]
},
plugins:[
new HtmlWebpackPlugin(),
new webpack.HotModuleReplacementPlugin() //add
],
devServer:{
host:'0.0.0.0',
port:'8888',
contentBase:path.join(__dirname,'../dist'),
/*热加载*///add
hot:true,//add
/*显示错误信息*/
overlay:{
errors:true
},
/*因为上面的publicPath:'/public/',所以访问的所有路径都要加上public*/
publicPath:'/public/',
historyApiFallback:{
/*如果页面404则返回下面配置的页面*/
index:'/public/index.html'
}
}
}
好了,该做的做完了,打开浏览器测试,发现更改App.jsx文件后浏览器竟然特么没有变化,这就很气人,我也按照你官网上写的做了,现在出不来?好吧,看下面的解决办法
四、解决上面的问题
app.js这个入口文件中,更改为:
更改为
如果有了更改,那么 重新用 require 的方式获取一下这个组件,然后进行渲染
成功啦!
是不是有了疑问,为啥用 require 的方式引入呢?因为这种形式的文件引入import的方式引入不了
五、总结
本来一个挺好的功能,分别写在了 webpack官网和 react-hot-loader 官网,这还不算啥,最后还运行不了,多坑,好了就记录到这里了,如果有问题或者补充欢迎回复
修改html时webpack热更新,webpack热更新(HMR)相关推荐
- 【Python】PyCharm热加载,调试时,修改运行时代码无需重新启动程序即可更新所做的修改
背景描述 简言之: 程序出现错误,修改错误代码后必须要重新执行整个程序 详细说明: 在调试python程序时经常会出现这样的情况,代码执行到某一处时出现错误,或者与预期的的结果不一致,这时候发现是某一 ...
- 修改html时webpack热更新,利用webpack实现对html文件的热更新
webpack中webpack-dev-server是一个简单的web服务器,能够帮助咱们实现代码的热更新,即在实际开发中只需保存修改完后的代码,不用手动刷新页面就能够看到效果.在使用webpack- ...
- less webpack 热更新_webpack---less+热更新 使用
最近尝试用less写界面,webpack进行打包,然后发现每次修改less时都需要重新执行webpack打包一下,于是就想到了webpack热更新这个功能. 一.使用less less是一门css预处 ...
- webpack 4 热更新后台成功更新浏览器不刷新
上一篇文章写的是 webpack4 打包,但是每次修改代码都要重新执行一次打包命令,实在是麻烦,本文将推出我的实现,仅做参考!!! 1.安装 webpack-dev-server npm instal ...
- idea修改代码后没有重新编译_SpringBoot中实现代码修改之后的自动更新与热加载...
在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果.那么有没有一种方式能够快速的.自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,对于这个功能很多人对功能 ...
- 热更新_热更新必懂3件事
今天我们来一起来说说热更新,谈起热更新,大家都觉得很难,都去找官方的热更新的解决方案,然后对着一步一步搞,原理还是不懂, 今天小编就带你来完整的讲解一下热更新的原理,搞懂原理,做热更新可以自己做,也可 ...
- unity python热更新_Unity热更新介绍和测试方法
最近项目中增加了热更新了功能,程序也完成了相应的开发,接下来就需要对这个模块进行相应的测试工作了,在测试开始之前,了解下其原理总是很有好处的. 1:什么是热更新 简单的理解就是:用户重启客户端就能实现 ...
- iOS 可用的热更新、热修复方案
前言 JSPatch虽然在两年前被苹果邮件警告,但是ReactNative依然盛行,只不过ReactNative并没有对Native进行热修复的功能,只是动态下发新的bundle模块.动态加载而已. ...
- 浅析“热更新”(热修复)解决方案
新闻事件背景:11月27日,苹果应用商店集中下架了拼多多.搜狗.科大讯飞.悦跑圈等多家公司的应用产品.科大讯飞和悦跑圈均表示,下架与"热更新"相关.然而,这并不是苹果应用商店第一次 ...
- UE4 版本迭代、资源热更、pak更新方案
本文链接:https://blog.csdn.net/BDalasja/article/details/95622429 UE4 版本迭代.资源热更.pak更新方案 注意:以下讨论的内容是客户端热更, ...
最新文章
- ubuntu20.04 中ifconfig无ens33
- R语言dplyr包mutate_at函数通过名称修改指定数据列的内容(使用统一的函数)实战
- pythonhistogram教程_OpenCV-Python 直方图-4:直方图反投影 | 二十九
- 今天去医院拿宝宝的微量元素检查结果
- step by step to download equipment via request download
- 数据驱动的软件开发者智能协作技术
- 典型医学设计实验GEO数据分析 (step-by-step) - 数据获取到标准化
- 精通版本之Subversion
- 【5分钟Paper】Fast强化学习和Slow强化学习
- open modelica RLC仿真
- TensorFlow学习【1】--TensorFlow下载安装
- Chrome浏览器多账户登录
- Faster rcnn 配置时出现bTest Key Error
- Linux之ARM(IMX6U)裸机主频和时钟配置
- PostgreSQL 技术内幕(二) Greenplum-AO表
- nginx源码的安装与磁盘分区
- 【java.lang.ref】当WeakReference的referent重写了finalize方法时会发生什么
- 汉化python语言编程界面_python设置中文界面实例方法
- 以太网 VLAN简介、MAC地址表与VLAN的关联内容
- QCustomPlot 线样式,点样式