uniapp打包H5空白页面或者刷新404问题

uniapp的路由跟vue一样,有hash模式和history模式,

使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。

如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。

官方文档:https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90

如果用hash的话,url后面会有#号,这样不美观也不好获取参数,比如我微信公众号登录需要跳转就会受到#影响,那就得用history模式,

"h5" : {
        "title" : "xxx",
        "domain" : "zlz.xxx.com",
        "router" : {
            "mode" : "history"

        }
      
    }

但这样打出包来可能会出现空白页面,然后报这个错:

Uncaught SyntaxError: Unexpected token '<'

这就是因为开发时默认是没有项目名的,都是相对于根目录,如果你部署的环境是有路径的,就需要配置base路径,否则找不到静态资源

有的人说改成‘./’,但我改了以后url又出现#号了。

"h5" : {
        "title" : "test",
        "router" : {
            "mode" : "history",
            "base" : "./"
        }

    }

所以还是谨慎使用./,而是改成你的项目实际地址,如果你的项目地址为 xxx.com/niubi/,或者xxx.com/niubi/pages/user/user,相当于在根目录前多了个niubi,那就把base改成你的实际目录就行了

"h5" : {
        "title" : "test",
        "router" : {
            "mode" : "history",
            "base" : "/niubi"
        }

    }

这样访问时就是自动在路径前都加上niubi 了,而且不会出现#

 

刷新404问题

我是微信登录需要跳转到本页面,但每次一跳就成了404了,你会发现开发时刷新没事,但是打包后一刷新就404

这是路由特性决定的,还是在这个文档里说的很清楚 

https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90

想用history又想刷新直接跳到对应页面,就需要后台服务器配置做配合

Apache

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

除了 mod_rewrite,你也可以使用 FallbackResource

#nginx

location / {
  try_files $uri $uri/ /index.html;
}

我用的nginx,在配置文件中加入这段话就解决了,当然,如果有路径,还是需要加上路径

location /niubi {
  try_files $uri $uri/ /niubi/index.html;
}

这样用了服务器的伪静态,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。

 

 

 

 

 

 

 

 

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
当使用Uniapp打包H5之后,页面样式丢失可能是由于以下原因导致的: 1. 缺少引入样式文件:在页面中使用了一些自定义样式或第三方样式库,但是没有在页面对应的引入样式文件,导致样式无法生效。可以检查代码中是否正确引入了所需的样式文件。 2. 样式文件路径错误:样式文件的路径是相对于页面的,如果路径设置错误,就会导致样式无法正确加载。需要确认样式文件的路径是否正确,并且在代码中指定了正确的路径。 3. 样式文件加载失败:可能是由于网络问题或路径错误等原因导致样式文件无法加载成功,建议使用开发者工具查看网络请求是否正常,如果请求失败可以检查路径和网络设置。 4. 样式冲突或覆盖:当页面中存在样式冲突或者样式覆盖时,可能会导致页面样式部分丢失。可以使用开发者工具中的元素面板查看元素的样式,并检查是否存在样式冲突或者样式被覆盖的情况。 5. 浏览器兼容性问题:不同的浏览器对于某些CSS属性或特性的支持程度不同,可能会导致页面在某些浏览器中样式丢失。建议使用一些浏览器兼容性工具或者查看官方文档,确认所使用的CSS属性在目标浏览器中是否支持。 在调试过程中,可以通过查看控制台输出的错误信息、检查样式文件的引入和路径、查看网络请求和使用开发者工具等方法来定位和解决页面样式丢失的问题

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

豆趣编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值