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模式

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你使用vue3和vite进行打包后,如果在服务器上打开页面时出现空白的情况,这可能是由于文件路径引发的404错误导致的。 初步分析,可能是你的打包文件中的资源文件(例如js和css文件)的引用路径不正确,导致服务器无法找到这些文件而出现404错误。 解决这个问题的方法之一是检查你的打包配置,确保资源文件的引用路径是正确的。你可以尝试修改vite的配置文件,特别是关于打包路径的配置,确保所有的资源文件都能被正确地加载。另外,还可以检查你的index.html文件,确保引用的资源文件路径与打包后的文件路径一致。 此外,还有一种可能是你的打包文件中存在其他问题,例如代码错误或依赖缺失,导致页面无法正确渲染。你可以使用浏览器的开发者工具控制台,查看是否有其他报错信息,以便更好地定位问题。 如果问题仍然存在,建议你查看具体的错误信息、文件路径以及打包配置,以便更好地分析和解决问题。如果需要进一步帮助,请提供更多详细的信息,例如打包配置和错误信息,以便我们更好地帮助你解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue3用vite打包上服务器后报错显示页面空白](https://blog.csdn.net/k490031/article/details/129733118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [“Vue3+Vite打包后,白屏沉默,重启重试无果,我该如何解决?”](https://blog.csdn.net/weixin_44637104/article/details/131342307)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [浏览器显示数据库中数据的条形图柱状图 前后端分离vue.js+spring boot 计算机软件工程课程设计毕业设计 ...](https://download.csdn.net/download/Amzmks/88275824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值