Vite 3 + Vue 3 异步加载路由后挂载 APP 实例:解决生产环境页面空白问题

news2024/9/28 3:21:06

Vite 3 + Vue 3 异步加载路由后挂载 APP 实例:解决生产环境页面空白问题

在使用 Vite 3 和 Vue 3 开发应用时,异步加载路由是一个常见的做法,但在某些情况下,这种方式可能会导致生产环境下页面出现空白。

问题描述

在我的项目中,我在 main.ts 中使用了顶层 await 来等待路由初始化。这一部分代码如下:

// main.ts

console.log("execute 111");
// 路由初始化完成后挂载 APP 实例
await router.isReady();
console.log("execute 222");

app.mount("#app");

在开发环境中,这段代码运行正常,控制台打印出 execute 111execute 222,页面也能正确访问。然而,在生产环境中,只有 execute 111 被打印,页面却是一片空白,并且控制台没有报错信息。

原因分析

经过排查,我发现问题出现在路由配置上。首页路由使用了异步懒加载:

import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";

const constantRoutes: RouteRecordRaw[] = [
  {
    path: "/",
    name: "home",
    component: () => import("@/views/home/index.vue"),
  },
  {
    path: "/:pathMatch(.*)",
    name: "404",
    component: () => import("@/views/error/404.vue"),
  },
];

由于 await router.isReady() 是一个顶层 await,它会阻塞资源的获取。这使得首页组件无法正确加载,从而造成了死循环:路由在等待访问者的同时,访问者又在等待路由的加载。

解决方案

方法一:直接加载首页组件

为了避免这种情况,我将首页路由的配置修改为直接加载组件,而其他页面仍然使用懒加载:

// router/index.ts

import Home from "@/views/home/index.vue";

const constantRoutes: RouteRecordRaw[] = [
  {
    path: "/",
    name: "home",
    component: Home, // 直接加载
  },
  {
    path: "/:pathMatch(.*)",
    name: "404",
    component: () => import("@/views/error/404.vue"),
  },
];

通过这种方式,首页路由会立即初始化,从而避免了页面空白的问题。

方法二:使用 .then() 处理异步加载

如果希望保持路由配置中的懒加载状态,可以使用 .then() 来处理路由初始化,而不是顶层 await。修改 main.ts 如下:

// main.ts

router
  .isReady()
  .then(() => {
    app.mount("#app");
  })
  .catch((err) => {
    console.error(err);
  });

这种方法不会阻塞资源的加载,并且在生产环境中能够正常显示页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单的springboot 编写Socket服务接口

简单的springboot 编写Socket服务接口 1.需求 我们项目中有部分老接口为票据接口,其中实现为java socket形式进行实现,但是其中大部分信息都是原始公司封装的包进行实现的,想要修改非常费劲,所以此处简单了解了一下socket&#…

卫星导航定位原理学习(三)

GNSS信号体制及其性能分析 GNSS信号体制直接影响卫星导航系统的性能,是卫星导航系统设计的重要内容。卫星导航信号体制主要包括信号频率、信号结构、导航电文3部分。其中信号结构又包括调制波形、频率带宽、扩频码码长、码速率、码结构、信号功率等内容。导航电文设…

25 Vue3之如何开发移动端并适配

开发移动端最主要的就是适配各种手机 vw vh是相对viewport 视口的单位,配合meta标签可以直接使用,无需计算 1vw1/100视口宽度 1vh1/100视口高度 当前屏幕视口是375像素,1vw就是3.75px postCss 提供了 把Css 转换AST的能力,类…

LeetCode --- 416周赛

题目列表 3295. 举报垃圾信息 3296. 移山所需的最少秒数 3297. 统计重新排列后包含另一个字符串的子字符串数目 I 3298. 统计重新排列后包含另一个字符串的子字符串数目 II 一、举报垃圾信息 直接用哈希表统计bannedWords中的单词,遍历message中出现的垃圾信息…

WiFi无线连接管理安卓设备工具:WiFiADB

介绍 WiFi ADB 使您能够通过 WiFi TCP/IP 连接直接在设备上轻松调试和测试 Android 应用,无需使用 USB 数据线。在启用 WiFi 上的 ADB 后,打开控制台将电脑连接到设备。 手机和电脑在同一个WiFi然后电脑上运行adb connect x.x.x.x:x命令即可 下载 谷…

Go语言开发后台框架不能只有CRUD还需有算法集成基础功能-GoFly框架集成了自然语言处理(NLP)分词、关键词提取和情感分析

前言 Go语言开发框架,我们要把Go的优势体现在框架中,不仅CRUD常规操作,还要把常用即有算力自己集成到框架中,而不是去购买第三方提供服务接口。作为开发者可以拓宽自己代码面,获取更多成就感,同时也提供自…

戴尔PowerEdge R840服务器亮黄灯 不开机

最近接修到一台东莞用户的DELL PowerEdge R840 服务器因为意外断电后,无法正常开机的问题, 大概故障现象是 插上电源线 按卡机按钮无响应,无法开机,无显示输出,工程师到现场检修,经过idrac中日志分析&#…

商标是什么?为何对企业至关重要?

商标作为企业的核心标识,不仅是区分商品与服务的关键,更是企业品牌塑造、市场区分和消费者信任建立的基石。那么,商标究竟是什么?它又为何对企业如此重要呢? 商标的定义及类型 商标(Trademark)…

Python获取百度翻译的两种方法

一、引言 百度是我们常用的搜索工具,其翻译是与爱词霸合作,总体看其反应速度较快,可以作为项目中重要的翻译工具。根据大家的需要,现提供两种Python获取百度翻译的两种办法: 二、requests法 我们引用requests模块&a…

构建5G-TSN测试平台:架构与挑战

论文标题:Building a 5G-TSN Testbed: Architecture and Challenges 作者信息: Anna Agust-Torra, Marc Ferr-Mancebo, David Rincn-Rivera, Cristina Cervell Pastor, Sebasti Sallent-Ribes,来自西班牙巴塞罗那的加泰罗尼亚理工大学&…

裁剪视频如何让画质不变?一文教会你

当我们想要从一段视频中提取精华,裁剪视频就成了必不可少的技能。 但是,如何做到在裁剪过程中不损害画质,保持视频原有的清晰度和流畅度呢? 这不仅需要技巧,还需要对视频编辑有一定的了解。 本文将为你介绍四种裁剪…

Redis篇(数据类型)

目录 讲解一:简介 讲解二:常用 一、String类型 1. 简介 2. 常见命令 3. Key结构 4. 操作String 5. 实例 二、Hash类型 1. 简介 2. 常见命令 3. 3操作hash 4. 实例 三、List类型 1. 简介 2. 特征 3. 应用场景 4. 常见命令 5. 操作list …

13.安卓逆向-frida基础-编写hook脚本1

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。 工…

外国电影演员识别系统源码分享

外国电影演员识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

AI产品经理必知:核心人工智能技术概览

第一章:AI产品经理是否需要懂技术及其程度 在当今AI行业快速发展的背景下,作为一位AI产品经理,理解并掌握一定的AI技术知识不仅是锦上添花,更是不可或缺的素质。那么,AI产品经理究竟需要懂到何种程度的技术呢&#xf…

国内车市销量激增,理想成功超越BBA

文/王俣祺 导语:随着“金九银十”的到来,国内汽车市场迎来了一个充满活力的开局。乘用车市场的销量已经迎来新的突破,彰显出中国汽车市场的韧性和潜力。尤为引人注目的是,新能源汽车销量同样激增,成为推动市场增长的重…

C++--IO流

目录 1. C语言的输入与输出 2. 流是什么 3. CIO流 4 stringstream的简单介绍 1. C语言的输入与输出 C 语言中我们用到的最频繁的输入输出方式就是 scanf () 与 printf() 。 scanf(): 从标准输入设备 ( 键 盘 ) 读取数据,并将值存放在变量中 。 printf(): 将…

C++ : 多态

1. 多态的概念 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的状态。 举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学…

通过队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int to…

基于微信小程序爱心领养小程序设计与实现(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…