问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

解决Vuehistory模式下使用嵌套路由打包部署后刷新页面为空白页_百度...

发布网友 发布时间:2024-09-17 05:27

我来回答

1个回答

热心网友 时间:2024-09-29 03:47

众所周知,Vue路由有两种模式,默认hash模式,这种模式下url上会带"#",因此很多公司开发都不使用hash模式而选用另一种history模式,因为history模式下的url不会带上"#"。不带"#"既是history模式的优点,同时也让它带来了一些烦人的问题,比如打包部署页面刷新为空白页,使用嵌套路由刷新为空白页的问题。今天我就分享下我解决嵌套路由刷新的问题。

问题分析

以下是我学习/测试时写的二级路由

当我第一次访问http://localhost:8081/personalcenter时默认跳转至http://localhost:8081/personalcenter/button1此时页面渲染毫无问题

但是当我们点击按钮切换路由组件或者刷新时,问题来了,页面空白,但url看起来却丝毫没有问题

这是为啥嘞,让我们用F12看看控制台报错

大概的意思就是说,哎,找不到你的页面资源啊,为啥呢?接下来我带大家分析下,首先我们也是打开F12,切换至"网络"这里,为啥使用网络分析,因为报错找不到资源嘛,那就是说请求出问题了嘛,所以看看出了啥问题了

首先重新打开这个页面,看看它第一次请求成功,请求了啥

第一次页面渲染成功,请求了啥?是不是请求了http://localhost:8081/static/js/0.141001dab9a800dfa8d8.js接下来我们把这清空下,然后刷新一下,看看失败时它请求了啥

是不是请求了http://localhost:8081/personalcenter/static/js/1.326021aaadef08402891.js细心的小伙伴应该已经看出来了失败的原因了,如果还有小伙伴没看出来的我把他两放一起,你们仔细瞧成功的:http://localhost:8081/static/js/0.141001dab9a800dfa8d8.js失败的:http://localhost:8081/personalcenter/static/js/1.326021aaadef08402891.js是不是失败的请求与成功的请求相比url多了一个personalcenter,personalcenter是啥?这不就是我们一级路由的名称嘛,接着我们看看打包的文件夹内有personalcenter路径吗?是不是没有,只有static,所以现在明白为啥刷新后请求失败了吧,因为路径根本不存在嘛

接下来我解释下为什么会多这个personalcenter,如果是hash模式下不会出现这个问题因为hash模式下url将会变成http://localhost:8081/#/static/js/0.141001dab9a800dfa8d8.js,在vue项目的浏览器会将#前面的内容作为根路径,因此不会出现此问题。而在history模式下没了#做分割,再加上官方文档中有这样一句话

所以呢在history模式下http://localhost:8081/personalcenter就理所因当的被当做根路径了,这也就是造成我们刷新为空的主要原因。

问题解决我的项目是vue2.x的项目,至于3.x的同理,作为前端小白在遇到这个问题时我查找了很多资料甚至在某宝上请教了些前辈,他们的说的大致类似首先现在build->config路径下的index.js中做如下配置(2.x项目是assetsPublicPath,而3.x项目是publicPath)

然后去build下的webpack.base.conf.js中配置如下

然后去webpack.dev.conf.js配置

然后他们说就行了,但是我到这却奇了个怪了,还是不行。说实话要不是经历过深度学习的毒打我可能就要骂人了,如果到此有的小伙伴就成功了,那恭喜你。如果还没成功的,我们继续往下看,到底是什么原因嘞,我认真分析后突然想到,之前在自学react课程时尚硅谷的天禹老师曾讲到过一个类似的二级路由css样式丢失问题(感兴趣的同学可以去看看这一节:https://www.bilibili.com/video/BV1wy4y1D7JT?p=82),虽然这是react但是与vue同为前端三大框架,因此有着极其相似的特点,在课程中天禹老师讲到在二级路由(atguigu/about)使用中,如果main.js中引用样式为./static/xxxxxx,那么出现问题正好是我们今天所遇到的请求时多了atguigu,因此我恍然大悟,打开了打包好的index.html一看果然全是./static

那么根据天禹老师所说的三种解决方法之一的将./static改为/static即可解决,因此我查看了打包所用到的文件,打包时路径使用的是config.build.assetsPublicPath即为"./",因此我们将build->config->index.js中的build下的assetsPublicPath从"./“改为”/"

然后运行npmrunbuild进行打包,然后查看打包好的index.html

此时点全没了,ok,部署看看部署后第一次访问http://localhost:8081/personalcenter

看看F12请求,正常

然后点击刷新页面看看,也没问题

然后点击按钮切换路由组件,发现也没问题

结语

到此为止就解决了今天的问题了,虽然不知道为啥最后我解决的方案和别人不一样,但是分析之后还是解决了,在csdn整理成文章,一是为了做个笔记,二是为了给遇到同样问题的小伙伴们做个技术参考(因此写的很多很详细)。

我的问题

这个是小白wwj的博客,在解决vue的多级路由下的刷新的产生空白页的问题

问题的起因:

在使用vue-cli2进行打包的时候,出现了一个问题和上面博主的博客中描述的一样,在我们第一次去请求的过程中,router路由下的请求回来的界面是正常的,但是当我们强制刷新的时候,我们的屏幕就是一篇空白,存在两种情况:第一种:简单路由下,刷新也会出现问题;第二种:复杂路由下,刷新也会出现问题

解决方法:

像上面楼主说的一样,在我们使用npmrunbuild生成的index文件中,将所有的./static路径修改成/static,当我们在多级的路由下刷新的时候,不会出现空白页面的问题理解:我们的生成的index文件中的js的路径是"./static",当我们的请求路径是"http://127.0.0.1:5000/A/B?name=waws"的时候,我们的路由的根基实际上是/A,在查找js的时候会将/A/static/js的部分,在我们生成的dist的文件夹中,index和static在同一个层次,但是并没有/A这个路径,所以找不到js报错。

在nginx的配置文件中,加上try_files$uri$uri//index.html;,即可完美解决.

简单路由下:在nginx的配置文件中,加上try_files$uri$uri//index.html;,即可完美解决.

复杂路由下:像上面楼主说的一样,在我们使用npmrunbuild生成的index文件中,将所有的./static路径修改成/static,当我们在多级的路由下刷新的时候,不会出现空白页面的问题.

理解:我们的生成的index文件中的js的路径是"./static",当我们的请求路径是"http://127.0.0.1:5000/A/B?name=waws"的时候,我们的路由的根基实际上是/A,在查找js的时候会将/A/static/js的部分,在我们生成的dist的文件夹中,index和static在同一个层次,但是并没有/A这个路径,所以找不到js报错。

热心网友 时间:2024-09-29 03:49

众所周知,Vue路由有两种模式,默认hash模式,这种模式下url上会带"#",因此很多公司开发都不使用hash模式而选用另一种history模式,因为history模式下的url不会带上"#"。不带"#"既是history模式的优点,同时也让它带来了一些烦人的问题,比如打包部署页面刷新为空白页,使用嵌套路由刷新为空白页的问题。今天我就分享下我解决嵌套路由刷新的问题。

问题分析

以下是我学习/测试时写的二级路由

当我第一次访问http://localhost:8081/personalcenter时默认跳转至http://localhost:8081/personalcenter/button1此时页面渲染毫无问题

但是当我们点击按钮切换路由组件或者刷新时,问题来了,页面空白,但url看起来却丝毫没有问题

这是为啥嘞,让我们用F12看看控制台报错

大概的意思就是说,哎,找不到你的页面资源啊,为啥呢?接下来我带大家分析下,首先我们也是打开F12,切换至"网络"这里,为啥使用网络分析,因为报错找不到资源嘛,那就是说请求出问题了嘛,所以看看出了啥问题了

首先重新打开这个页面,看看它第一次请求成功,请求了啥

第一次页面渲染成功,请求了啥?是不是请求了http://localhost:8081/static/js/0.141001dab9a800dfa8d8.js接下来我们把这清空下,然后刷新一下,看看失败时它请求了啥

是不是请求了http://localhost:8081/personalcenter/static/js/1.326021aaadef08402891.js细心的小伙伴应该已经看出来了失败的原因了,如果还有小伙伴没看出来的我把他两放一起,你们仔细瞧成功的:http://localhost:8081/static/js/0.141001dab9a800dfa8d8.js失败的:http://localhost:8081/personalcenter/static/js/1.326021aaadef08402891.js是不是失败的请求与成功的请求相比url多了一个personalcenter,personalcenter是啥?这不就是我们一级路由的名称嘛,接着我们看看打包的文件夹内有personalcenter路径吗?是不是没有,只有static,所以现在明白为啥刷新后请求失败了吧,因为路径根本不存在嘛

接下来我解释下为什么会多这个personalcenter,如果是hash模式下不会出现这个问题因为hash模式下url将会变成http://localhost:8081/#/static/js/0.141001dab9a800dfa8d8.js,在vue项目的浏览器会将#前面的内容作为根路径,因此不会出现此问题。而在history模式下没了#做分割,再加上官方文档中有这样一句话

所以呢在history模式下http://localhost:8081/personalcenter就理所因当的被当做根路径了,这也就是造成我们刷新为空的主要原因。

问题解决我的项目是vue2.x的项目,至于3.x的同理,作为前端小白在遇到这个问题时我查找了很多资料甚至在某宝上请教了些前辈,他们的说的大致类似首先现在build->config路径下的index.js中做如下配置(2.x项目是assetsPublicPath,而3.x项目是publicPath)

然后去build下的webpack.base.conf.js中配置如下

然后去webpack.dev.conf.js配置

然后他们说就行了,但是我到这却奇了个怪了,还是不行。说实话要不是经历过深度学习的毒打我可能就要骂人了,如果到此有的小伙伴就成功了,那恭喜你。如果还没成功的,我们继续往下看,到底是什么原因嘞,我认真分析后突然想到,之前在自学react课程时尚硅谷的天禹老师曾讲到过一个类似的二级路由css样式丢失问题(感兴趣的同学可以去看看这一节:https://www.bilibili.com/video/BV1wy4y1D7JT?p=82),虽然这是react但是与vue同为前端三大框架,因此有着极其相似的特点,在课程中天禹老师讲到在二级路由(atguigu/about)使用中,如果main.js中引用样式为./static/xxxxxx,那么出现问题正好是我们今天所遇到的请求时多了atguigu,因此我恍然大悟,打开了打包好的index.html一看果然全是./static

那么根据天禹老师所说的三种解决方法之一的将./static改为/static即可解决,因此我查看了打包所用到的文件,打包时路径使用的是config.build.assetsPublicPath即为"./",因此我们将build->config->index.js中的build下的assetsPublicPath从"./“改为”/"

然后运行npmrunbuild进行打包,然后查看打包好的index.html

此时点全没了,ok,部署看看部署后第一次访问http://localhost:8081/personalcenter

看看F12请求,正常

然后点击刷新页面看看,也没问题

然后点击按钮切换路由组件,发现也没问题

结语

到此为止就解决了今天的问题了,虽然不知道为啥最后我解决的方案和别人不一样,但是分析之后还是解决了,在csdn整理成文章,一是为了做个笔记,二是为了给遇到同样问题的小伙伴们做个技术参考(因此写的很多很详细)。

我的问题

这个是小白wwj的博客,在解决vue的多级路由下的刷新的产生空白页的问题

问题的起因:

在使用vue-cli2进行打包的时候,出现了一个问题和上面博主的博客中描述的一样,在我们第一次去请求的过程中,router路由下的请求回来的界面是正常的,但是当我们强制刷新的时候,我们的屏幕就是一篇空白,存在两种情况:第一种:简单路由下,刷新也会出现问题;第二种:复杂路由下,刷新也会出现问题

解决方法:

像上面楼主说的一样,在我们使用npmrunbuild生成的index文件中,将所有的./static路径修改成/static,当我们在多级的路由下刷新的时候,不会出现空白页面的问题理解:我们的生成的index文件中的js的路径是"./static",当我们的请求路径是"http://127.0.0.1:5000/A/B?name=waws"的时候,我们的路由的根基实际上是/A,在查找js的时候会将/A/static/js的部分,在我们生成的dist的文件夹中,index和static在同一个层次,但是并没有/A这个路径,所以找不到js报错。

在nginx的配置文件中,加上try_files$uri$uri//index.html;,即可完美解决.

简单路由下:在nginx的配置文件中,加上try_files$uri$uri//index.html;,即可完美解决.

复杂路由下:像上面楼主说的一样,在我们使用npmrunbuild生成的index文件中,将所有的./static路径修改成/static,当我们在多级的路由下刷新的时候,不会出现空白页面的问题.

理解:我们的生成的index文件中的js的路径是"./static",当我们的请求路径是"http://127.0.0.1:5000/A/B?name=waws"的时候,我们的路由的根基实际上是/A,在查找js的时候会将/A/static/js的部分,在我们生成的dist的文件夹中,index和static在同一个层次,但是并没有/A这个路径,所以找不到js报错。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
vivo y3t手机能拨打和接听电话,不能收发短信 vivoy3t手机突然接收不到短信 vivoy3短信消息怎么提醒 无奈什么意思是什么 怎样让炒出的丝瓜不发黑? 钟表是以什么计量时间 钟表以( )、()、( )计量时间。 钟表以( )、()、( )单位计量时间 紫荆花开放时间 《青春 须臾成殇》渭伊的txt全集下载地址 睾丸下痒,睾丸上的皮好象干的一样,起皮,像干的鱼鳞一样 VUE引用第三方js(vue引用外部js) vue获取上传文件的本地路径? 2012年陕西高考文科考生一分差多少人?文科485是多少名次?全省文科一本... 2012陕西统考成绩下来、博弈的学生被扣30分、省招办不是人、摧毁1400... 陕西今年高考700分以上的有多少人 陕西高考分数580分以上有多少呢? 苹果16手机图片和颜色 iPhone16要全系取消静音拨片吗标配操作按钮好不好用【详解】 做文案学什么专业好精选42句 京东怎么删评 区块链双重支付是什么意思(区块链双重支付是什么意思呀) 我确诊为肾阳虚,让我参茸鞭丸,和参茸三肾一起吃,这样会不会过于猛了... 往生咒修学方法 达尔巴背景故事 广西平南县有什么特产 贵港市平南自驾游景点有哪些 高考准考证人脸怎么录入 个人私自买卖土地犯法吗 私自买卖土地是否合法? vue如何引入js文件(vue引入js文件里面的代码会不会执行) 613ExcelVBA数据库的索引 ...报到都超过两个月了,但公司还不让上班,会有猫腻吗 千里雷声万里闪陪葬是哪一集 千里雷声万里闪有千里雷声万里闪第二季吗 没收财产法院会拍卖房子吗 判型没收全部财产,房子子女还能住吗 圣水黄金什么意思啊 怎样将图片转换成二维码? 文章里有图片怎么生成二维码? 刚吃完母乳能吃奶粉吗 宝宝吃饱母乳还会再吃奶粉吗 婴儿吃母乳后能吃奶粉吗 宝宝喝母乳后不够喝,可以马上冲奶粉给他喝吗? 孩纸们,竹仔鱼——你们吃过么??? 十大特色潮汕名菜排名(潮州十大名菜有哪些) 医保卡密码忘记了怎么办 2022年医保卡买药要输密码吗 电动车p键钥匙没了怎么办 P字开头的钥匙项链牌子有几个 显示器颜色不正常、偏色的原因有哪些?