vue3路由模式为history,打包后页面空白的处理方式

在Vue3中,使用vue-router的history模式会导致打包后直接打开index.html显示空白。为解决此问题,需配置vue.config.js的publicPath为'./',并在vue-router中设置createWebHistory(/)。同时,服务器配置如Nginx需配置try_files规则,确保未找到资源时返回index.html,将静态资源放在指定目录并访问服务器地址即可正常显示。

场景

vue-router 的 hash 模式时,url始终待着’#‘,如’http://localhost:8080/#/index.html’。
如果要去掉’#'号,那么就需要把 vue-router 的 hash 模式改为 history(html5)模式。

# vue3

const router = createRouter({
  //hash 模式  
  // history: createWebHashHistory(),
  //html5 模式
  history: createWebHistory("/"),
  routes
})

问题

hash 模式打包后的 dist 文件夹中可以直接打开 index.html 看到页面。
但是 history 模式打包后,打开 /dist/index.html 时会出现页面空白现象。

解决方案

vue 官网的说明
官网上解释了出现这种问题的原因,我们需要进行如下的几步配置。

1. 配置 vue.config.js 中的 publicPath

# vue.config.js

module.exports = {
  //根目录
  publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
};

2.配置 vue-router

const router = createRouter({
  //根目录
  history: createWebHistory("/"),
  routes
})

3.配置 nginx 的 server

location / {
    root   /opt/app/fontend;
    index index.html index.htm;
    try_files  $uri $uri/ /index.html;
}

把打包后生成的 css、js、html 等文件放入服务器中的/opt/app/fontend目录下,访问对应 ip:端口 即可看到页面。

Vue下路由History模式打包页面空白的解决方法在 Vue 项目中,默认的路由模式是 Hash 模式,但是这种模式会带来一些问题,如 URL 中的 "#" 符号不美观,微信分享、授权登录等功能也会出现一些问题。 History 模式可以解决这些问题,但是新手往往会碰到 History 模式打包页面空白的情况,这个问题是因为 Vue 官方没有正确地配置路由的 base 参数所导致的。解决方法是,在 vue-router 的配置中添加 base 参数,例如:`base: /history,mode: history`。这个 base 参数是项目的路径,如果项目在根目录下,则不需要添加 base 参数,但是如果项目在子目录下,则需要添加 base 参数。此外,还需要在服务器上配置路由,例如使用 Nginx 配置 location /history { ... },这样可以将所有请求重定向到 index.html 文件中,并让 Vue 路由正确地解析 URL。在 History 模式下,浏览器会模拟出一条历史记录,但是服务器上没有真正的路径资源,所以会出现 404 错误。如果使用 Hash 模式,则不会出现这个问题,因为 Hash 模式的 URL 带有 "#" 符号,服务器不会解析这个 URL。在 Vue 项目中,使用 History 模式需要正确地配置路由的 base 参数和服务器的路由配置,否则会出现页面空白的问题。同时,也需要注意如果项目不是根目录下,需要添加 base 参数,以便 Vue 路由正确地解析 URL。使用 History 模式需要正确地配置路由的 base 参数和服务器的路由配置,以便解决页面空白的问题,并且让 Vue 路由正确地解析 URL。知识点:1. Vue 路由的两种模式:Hash 模式和 History 模式2. History 模式的优点:解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值