用Gitee Pages服务在线预览vue3前端项目:静态网站+多级路由+history模式(踩坑)

目录

目标与前提

vue打包、预览遇到的坑以及原因

坑①:静态网站打开一片空白

坑②:子路由刷新或直接输入时,网页一片空白或404

坑③:首页加载时间过长

坑④:线上预览地址出错时,不显示404页面

坑⑤:线上更新页面文件以后,访问网址发现内容没变

实现预览+解决问题(省略vue和git基础)

1、Gitee账号实名认证

2、解决坑①以及本地调式时遇到的坑②

3、解决坑③-使用路由懒加载

4、解决坑④-给前端路由设置404页面

5、解决部署dist静态网站时遇到的坑②:创建spa文件

6、打包vue项目、更新到gitee远程库

7、使用Gitee Pages部署静态网站

8、解决坑⑤-手动更新+清除缓存+URL跟随机数


        多个开源平台都支持项目在线预览,比如github、gitee,考虑国内访问速度、中文支持以及免费,使用gitee。

目标与前提

前提:vue3的前端demo,包括多级路由(子路由),router用的是history模式,已通过Gitee进行版本管理。

目标:不改变以上前提,用Gitee Pages实现该demo在线展示

vue打包、预览遇到的坑以及原因

坑①:静态网站打开一片空白

            原因:首次打包vue项目遇到这个问题,九成是静态文件路径错误。

坑②:子路由刷新或直接输入时网页一片空白或404

            原因:history模式下地址栏没有#符号,url比hash模式好看,对SEO排名也有益处。但直接输入地址或刷新页面时,浏览器会将URL整个发到后端,后端找URL下的index.htm,文件不存在,返回404。

坑②分两种情况,一种是本地调试时遇到的,一种是部署dist静态网站时遇到的,两者解决方法有分别,详述见下文。

坑③:首页加载时间过长

            原因:排除网络、图片懒加载因素,如果还是加载时间过长,可能是路由没有用懒加载,加载首页的时候其他路由被同时加载。

坑④:线上预览地址出错时,不显示404页面

            原因:如果这个问题是解决坑②以后出现,此时网站目录下的网址是前端路由在处理,所以后端不会发404页面给前端,而前端路由也没有设置404页面,所以一片空白。

坑⑤:线上更新页面文件以后访问网址发现内容没变

            原因:1、Gitee免费版不会主动更新网页文件;2、浏览器缓存未清除。

实现预览+解决问题(省略vue和git基础)

1、Gitee账号实名认证

        Gitee账号要实名认证,才能使用Gitee Pages,可以先提交照片到认证页面,然后处理接下来的工作,因为认证大概需要一个工作日。

2、解决坑①以及本地调式时遇到的坑②

        打包之前先要填几个坑,需要配置vue.config.js文件,没有就在项目根目录下新建一个,内容如下,其中publicPath设置成 /gitee远程库名/ ,两边是斜杠:

module.exports = {
    publicPath: '/effects/',    //gitee远程库名
    //比如:pages地址:https://xxxxxx.gitee.io/effects,publicPath就是/effects/

    outputDir: 'dist/',
    assetsDir: 'static/'
  }

3、解决坑③-使用路由懒加载

        在router/index.js文件中,将引用页面的语句改成以下方式:

const Home=() => import("@/views/Home.vue")

        上边代码中的常量Home,被调用时才会将页面引用进来。多个路由修改成懒加载示例:

//懒加载
const [Home,Child]=[
  () => import("@/views/Home.vue"),
  () => import("@/views/Child.vue"),
];

const routes = [{
    path: '/',
    name: 'Home',
    component:Home,
    children:[{
        path: 'Child',
        name: 'Child',
        component:Child,
      }]}];

        注意事项:
                1)旧项目中,如果使用babel,以上语句可能引发报错,此时需要安装syntax- dynamic import中间件:

npm install --save-dev @babel/plugin-syntax-dynamic-import

                2)如果脚手架已经升级,例如CLI5.0.4版本,就不需要安装1)中的插件了。新项目默认使用懒加载。只是引用没有定义成常量,如果需要复用,可以自己定义一下。

4、解决坑④-给前端路由设置404页面

        建立src/views/NotFound.vue文件,内容如下(按需改):

<template>
  <div>{{"页面不存在"+s+"秒以后为您跳转至主页"}}</div>
</template>
<script>
export default {
  data(){return{s:3,}},
  mounted(){
    let timer=setInterval(()=>{
      this.s-=1;
      if(this.s<=0){
        clearInterval(timer);
        console.log(this.s);
        this.$router.push({name:'Home'});
      }},1000);
  }}
</script>

        在router/index.js文件中设置404路由,/:pathMatch(.*)/放在最后一项:

//懒加载
const [Home,Child,NotFound]=[
  () => import("@/views/Home.vue"),
  () => import("@/views/NotFound.vue")    //404页面引入
];

const routes = [
  {
    path: '/',
    alias:'/Home',
    name: 'Home',
    component:Home,
  },
//404页面设置↓================================
  {
    path:'/404',
    name:'404',
    component:NotFound,
  },
  {//放到路由最下边一项,因为路由会先匹配上边的项
    path:'/:pathMatch(.*)/',
    name:'NotFound',
    redirect:'404',
  }
//404页面设置↑================================
];

5、解决部署dist静态网站时遇到的坑②:创建spa文件

        参考Gitee Pages文档:只要在dist文件夹下加一个.spa文件即可,spa前边有个点,点前边什么也不写,文件内容也不用写,就是给Gitee Pages一个记号,有这个记号的文件夹会被看做单页面应用。
Pages 单页面应用支持 - Gitee.com

6、打包vue项目、更新到gitee远程库

        cmd项目根目录下执行以下命令:

npm run build

        打包以后,项目根目录会生成dist文件夹,就是静态网站的根目录。

   注意:先检查项目根目录下的.gitignore文件,如果有dist这一项,就将该项删掉,不然dist文件夹无法添加到库。

        将打包好的项目更新到gitee远程库,此时在远程库中应看到dist文件夹。

7、使用Gitee Pages部署静态网站

        实名认证成功以后,在gitee远程库的服务菜单中选择Gitee Pages→选择要部署的分支(默认master)→部署目录填写dist→勾选“强制使用HTTPS”→开启→点击网站地址即可预览。

8、解决坑⑤-手动更新+清除缓存+URL跟随机数

        1)Gitee免费版不自动更新,需要手动在Gitee Pages 服务页面(上图),点击更新;
        2)可以手动清除浏览器缓存,以google为例,按下ctrl+shift+del,在“清除浏览数据”中选择“缓存的图片和文件”→点击清除数据,再进入网站就会重新加载页面了。

        3)但是他人浏览网站时,不能指望对方主动清除缓存,可以通过添加meta的方式解决:

<meta http-equiv="pragram" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, must-revalidate">

        除了添加meta之外,还可以让URL带一串随机参数,例如:

https://abcd.io/exp?16499455593433257


        参数可以用时间截+随机数字生成,例如:

    let url =
      "https://abcd.io/exp" +
      "?" +
      new Date().getTime().toString() +
      (Math.random() * 9999).toFixed(0).toString();

        浏览器会重新请求页面,但是原来的缓存还在浏览器,直到缓存过期。

  • 如果更新的是主页,需要更新公布出去的网址,改变URL随机参数。
  • 如果更新的是子页面,可以在路由或主页中的子页面连接中提前设置随机数。
  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

观察蚂蚁的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值