解决vite打包后白屏之router-view不生效问题

 更新时间:2024年07月05日 15:41:49   作者:xiaban_  
这篇文章主要介绍了解决vite打包后白屏之router-view不生效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题发现

项目打包后白屏,最开始是在打包后的dist文件中的index.html中路径爆黄

控制台报错找不到资源

简单搜索后发现在vite.config.ts中配置base: "./"即可解决报错问题

import {defineConfig, loadEnv} from 'vite'  
import vue from '@vitejs/plugin-vue'  
// @ts-ignore  
import path from 'path'  
  
export default defineConfig(({ mode }) => {  
  
return {  
	base: "./",  
	plugins: [  
		vue()  
	],  
	resolve:{  
			alias:{  
			// @ts-ignore  
			'@': path.resolve(__dirname, './src')  
			}  
		}  
	}  
})

控制台没报错了,但是依旧是白屏

开了个新项目,打包后能够正常使用,初步判定是路由的问题,然后在本项目的App.vue中加了123,发现打包后可以显示123,但是还是不显示其他的页面

<script setup lang="ts">  
  
</script>  
  
<template>  
	<div>  
		123  
	<router-view/>  
	</div>  
</template>  
  
<style scoped>  
  
</style>

解决方案

最后搜索了router-view为什么不显示,找到一篇文章说vite打包的项目需要在服务端环境才可以正常访问,不能直接客户端浏览器访问

如果是vscode,可以下载live server模拟服务端环境,如果是webstorm,则可以右上角直接点开就是模拟服务端环境

但是结果还是白屏,后续发现是只有路由模式是history的情况下,router-view才会失效,改为hash模式就可以生效了。

import {createRouter, createWebHashHistory} from "vue-router";  
import pay from "@/page/pay.vue";  
  
const routes = [  
	{ path: '/', component: pay,redirect:"/pay" },  
	{ path: '/pay', component: pay }  
]  
  
const router = createRouter({  
	history: createWebHashHistory(),  
	// @ts-ignore  
	routes, 
})  
  
export default router;

值得注意的是,如果不模拟服务端环境,直接在文件访问,还是会报错

补充

hash和history区别

简单来说就是hash模式就是路径中带#的,history模式就是路径中不带#号

Hash模式

Hash 模式是通过监听 URL 中的 hash 值( # 及其后面的部分)来实现路由切换和组件渲染的。

优点:

  • 兼容性好,支持所有浏览器,包括不支持 HTML5 History API 的老旧浏览器。
  • 服务端无需做特殊配置。

缺点:

  • URL 中有 # 号,不太美观。
  • 部分老旧的浏览器可能会有效率问题。

Hash模式路由实现原理

在 hash 模式下,路由的实现主要依赖于 URL 的 hash 部分(即#后面的部分)。

History模式

History 模式利用 HTML5 History API 中的 pushState 和 replaceState 方法来实现 URL 的导航,无需 # 号。

优点:

  • 更加美观,看起来像标准的网站链接。
  • 符合 HTML5 标准,支持浏览器的前进/后退按钮。

缺点:

  • 部分老旧的浏览器不支持 HTML5 History API,需要使用垫片库(Polyfill)来支持。
  • 需要在服务端做特殊配置,确保所有的 URL 都能找到应用入口文件(例如 index.html),否则会出现 404 错误。

History模式路由实现原理

在history模式下,路由的实现主要依赖于HTML5的History API。

结语

如果是实在想要history模式的,可以在本地打包完需要测试的,改为hash模式后,用live server插件或者直接webstorm打开即可成功测试,准备部署后再修改为history模式

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue.js滚动条插件vue-scroll的基本用法

    vue.js滚动条插件vue-scroll的基本用法

    在移动端或PC,页面的部分内容常常需要我们让其在页面滚动,这篇文章主要给大家介绍了关于vue.js滚动条插件vue-scroll的基本用法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 解决element ui select下拉框不回显数据问题的解决

    解决element ui select下拉框不回显数据问题的解决

    这篇文章主要介绍了解决element ui select下拉框不回显数据问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • 100行代码理解和分析vue2.0响应式架构

    100行代码理解和分析vue2.0响应式架构

    通过100行代码帮助大家理解和分析vue2.0响应式架构的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Vue.js递归组件实现组织架构树和选人功能案例分析

    Vue.js递归组件实现组织架构树和选人功能案例分析

    这篇文章主要介绍了Vue.js递归组件实现组织架构树和选人功能,本文通过案例代码讲解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • vue2.0实现列表数据增加和删除

    vue2.0实现列表数据增加和删除

    这篇文章主要为大家详细介绍了vue2.0实现列表数据增加和删除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • vue项目index.html中使用环境变量的代码示例

    vue项目index.html中使用环境变量的代码示例

    在Vue3中使用环境变量的方式与Vue2基本相同,下面这篇文章主要给大家介绍了关于vue项目index.html中使用环境变量的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • vue修改数据的时候,表单值回显不正确问题及解决

    vue修改数据的时候,表单值回显不正确问题及解决

    这篇文章主要介绍了vue修改数据的时候,表单值回显不正确的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Vue3项目实现前端导出Excel的示例代码

    Vue3项目实现前端导出Excel的示例代码

    这篇文章主要介绍了Vue3项目实现前端导出Excel的示例,在vue3的项目中导出Excel表格的功能,可以借助xlsx库来实现,下面是详细的操作步骤,需要的朋友可以参考下
    2025-01-01
  • vue项目启动命令个人学习记录

    vue项目启动命令个人学习记录

    最近想要学习vue,正好看到资料,如何通过命令创建vue项目的方法,就留个笔记,下面这篇文章主要给大家介绍了关于vue项目启动命令的相关资料,需要的朋友可以参考下
    2023-02-02
  • vue.js中$set与数组更新方法

    vue.js中$set与数组更新方法

    下面小编就为大家分享一篇vue.js中$set与数组更新方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03

最新评论