700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > vue热更新无法关闭_vue-cli3热更新失效

vue热更新无法关闭_vue-cli3热更新失效

时间:2018-10-07 00:15:50

相关推荐

vue热更新无法关闭_vue-cli3热更新失效

vue-cli3热更新失效问题

公司的一个使用vue-cli3搭建的项目一直无法热更新,每次保存代码后都需要手动刷新页面才能看到修改之后的页面,作为一个强迫症晚期患者,那肯定是忍不了。经过个人研究学习,修复好了项目热更新问题,因此写下博客分享给各位。

内容都是本人看文档查资料后自己理解的,难免有理解不到位的地方,也欢迎大家指出错误之处,一起学习共同进步。

项目开发环境背景

我司项目由于相关原因需要前端开发的时候使用nginx代理,例如项目启动后为http://localhost:8080,配置nginx后前端访问

排查步骤

sockjs-client

应该有不少使用vue脚手架创建项目的小伙伴都遇到过这么一个问题,/sockjs-node/info?t=在浏览器控制台一直报错。在百度之后大家的解答出人意料的一致:

注释掉/node_modules/sockjs-client/dist/sockjs.js这个文件第1605行的self.xhr.send(payload)

事实上我司项目中也是这么处理的,那会不会是sockjs-client导致的热更新失效呢?

答案是:是的。

在将源码注释去掉后,经过测试发现:

访问localhost:8080不会报错,访问代理地址也不会报错,

而访问代理地址就会开始报错。

而且对比浏览器network中报错请求的地址可以发现:

前端页面地址为localhost:8080或时sockjs请求的地址是http://xxxxx(本机ip地址),

页面地址为时sockjs请求的地址是https://xxxxx(本机ip地址)。

devServer.public

查阅webpack文档,发现这个配置项:

文档上说明,如果开发服务器被nginx代理,则可配置该项。那就加上试一下

// vue.config.js

devServer: {

public: ':443',

}

重启项目,类似/sockjs-node/info?t=格式的报错没有了,但出现了新的错误:

WebSocket connection to 'wss:///sockjs-node/244/gymxpeaf/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400

nginx

在github上找到是nginx配置问题,添加如下配置:

# nginx.conf

location / {

proxy_pass http://localhost:8080;

# 以下是新增配置

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

proxy_set_header Host $host;

}

至此,热更新问题解决。

其他

vue.config.js中的css配置项

在开发环境需要关闭css分离

// 是否为生产环境

const isProduction = process.env.NODE_ENV === 'production'

module.exports = {

css: {

// 是否开启css分离 在开发环境开启会导致热更新异常

extract: isProduction,

// 在浏览器审查时是否显示当前css文件路径 开发环境建议开启 不影响热更新

sourceMap: true,

},

// 生产环境是否生成sourceMap文件

productionSourceMap: false,

...

}

本人在错误排查过程中也试过这两个配置项,没有效果;在查阅资料过程中部分开发者表示用了这个有效。

同类型问题解答

总结

以上就是本次解决项目热更新问题的全过程,很多地方本人还是一知半解,只是把结果搞出来了。文章中有任何问题也欢迎留言讨论 :)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。