代理域名后webpack热更新失效及解决
# 问题描述
先说下背景,通常情况下webpack(Vue)项目是通过npm run dev
来启动的,webpack配置
devServer: {
hot: true,
}
1
2
3
2
3
即可实现热更新。
这种是常规的开发方式,访问的页面一般是localhost:端口号
,没有任何问题。
不过,个人习惯直接通过访问域名的方式来开发,通过代理工具来进行转发。比如在lightProxy
中配置
https://example.com http://localhost:8088
1
就可以在页面直接访问example.com
来代替localhost:8088
了。
但这里就产生了新的问题,修改代码,webpack重新编译后,页面无法热更新了。
# 问题分析
先捋一下热更新的原理,参考自轻松理解webpack热更新原理 (opens new window)。
- webpack监听文件修改
- 触发重新编译
- 通过websocket通知浏览器
- 浏览器通过JSONP方式请求重新编译的js
- 新模块替换旧模块,页面更新
然后对比下2种方式的区别
localhost访问
建立ws,正常
获取模块,正常,页面热更新
域名访问
建立ws,不正常
获取模块,不正常,页面没有热更新
问题比较明显了,域名开发的方式,在一开始建立websocket时就失败了,没有ws通信,浏览器是收不到重新编译通知的。
# 问题解决
只需要在lightProxy
新增一行代理即可。
ws://example:8088/ws ws://localhost:8088/ws
1
类似问题:
上次更新: 2022/02/08, 16:35:17