vite vue3 代理发布不停自动刷新的问题

 问题描述:

      今天帮朋友处理一个问题,前端使用的项目是vue3 + vite 环境开发的。在使用vs进行运行的时候,本地访问没问题,使用nginx本地代理访问也没有问题,但是使用代理的时候,发现页面不停的自动刷新。同时会发出wss连接报错导致页面更新不停的刷新,提示wss连接失败,如下图:
 

      错误信息一闪一闪的,不停的重复更新。

问题分析:

      一开始以为是项目里面有一个自动连接的服务,发现找来找去,没有找到。后来在网上才发现,这个是开发环境里面,热更新使用的,就是在工具里面编写代码并且保存,页面自动刷新用的。但是使用了代理之后,由于代理走的端口发布前端项目和ws走的端口不一样,导致ws在请求服务器的时候,提示连接失败。从而不停的刷新界面,请求服务器获取连接。

问题处理:

      想要处理这个问题,需要从两方面入手,一个是需要修改vue3里面的代码配置,第二个是修改nginx的反向代理,时期支持wss或者ws。

一、修改vue3里面的配置文件,使其页面端口和ws使用不同的端口,需要修改vite.conf.js文件里面的service,代码如下:

  server: {
        port: 3001, //指定端口号
        open: true,
        hmr: {
            clientPort: 80, // 修改ws端口的地方
        }
    }

最主要的是hmr这个配置。

二、修改nginx反向代理配置:
配置变量如下:
 

upstream pub {
   server localhost:3001; # appserver_ip:ws_port
}


map $http_upgrade $connection_upgrade {
   default upgrade;
   '' close;
}


server {
        listen       8080;
        server_name  localhost;
		client_max_body_size 20m;
      
       location /pub/ {
			proxy_pass http://127.0.0.1:3001/pub/;
			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection $connection_upgrade;
			proxy_set_header Host $host;
		}
 }

 三个地方配置完之后,重启服务就可以了。

自己的理解

    平常使用代理,通过nginx反向代理访问网页。但是配置里面,指定了端口为3001,这就导致虽然网页通过nginx反向代理的3001,但是ws并没有。还是走的3001,配上代理的域名,访问页面的时候是XXXX/pub/,但是ws的则是XXXX:3001/pub/ 的情况。 所以,这里通过自动以ws端口为80,默认走代理的默认端口,就避免掉了上面的问题。

原始文档: vite websocket 公网 端口 连接异常问题 - 码农教程

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Vue3和Vite中实现版本更新自动刷新的方法下: 1. 配置Vite插件:在vite.config.js文件中,可以使用versionUpdatePlugin插件来实现版本更新自动刷新。该插件可以在每次打包生产代码时,在public目录下生成一个version.json版本信息文件,并将版本号定义为全局变量__APP_VERSION__。同时,该插件还可以监控版本迭代更新,并在页面跳转时,通过请求服务器端的version.json文件和浏览器本地缓存的版本号进行对比,从而实现页面自动更新。 ```javascript // vite.config.js import { defineConfig } from 'vite' import versionUpdatePlugin from './versionUpdatePlugin' export default defineConfig((config) => { const now = new Date().getTime() return { define: { __APP_VERSION__: now, // 定义全局变量__APP_VERSION__ }, plugins: [ // 使用versionUpdatePlugin插件 versionUpdatePlugin({ version: now, }), ], // 其他配置项... } }) ``` 2. 创建versionUpdatePlugin插件:在项目根目录下创建一个名为versionUpdatePlugin.js的文件,并在该文件中定义versionUpdatePlugin插件。 ```javascript // versionUpdatePlugin.js export default function versionUpdatePlugin(options) { return { name: 'version-update-plugin', apply: 'build', generateBundle(_, bundle) { const version = options.version const versionInfo = { version: version, } const versionJson = JSON.stringify(versionInfo) // 在public目录下生成version.json文件 this.emitFile({ type: 'asset', fileName: 'version.json', source: versionJson, }) // 其他操作... }, } } ``` 通过以上配置,每次打包生产代码时,会在public目录下生成一个version.json文件,并将版本号定义为全局变量__APP_VERSION__。在页面跳转时,可以通过请求服务器端的version.json文件和浏览器本地缓存的版本号进行对比,从而实现页面自动更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值