解决Vue3 + TypeScript + Vite搭建的项目,动态路由页面加载失败的最隐蔽原因

最初

ts 复制代码
const viewFiles = import.meta.glob('@/views/**/*.vue')

export function loadView(filePath: string) {
  const key = `@/${filePath}`
  return viewFiles[key]
}

export function formatAsyncRoutes(menuList: any[]) {
  return menuList.map(menuItem => {
    return {
      path: menuItem.path,
      meta: menuItem.meta || {},
      component: () => import('@/layout/index.vue'),
      children: menuItem.children.map(child => ({
        path: child.path,
        meta: child.meta || {},
        component: loadView(child.component)
      }))
    }
  })
}

解决

ts 复制代码
// 获取所有views下vue文件,拿到真实绝对路径key
const viewModules = import.meta.glob('/src/views/**/*.vue')

export function loadView(filePath: string) {
  // 后端传入:views/tableDemo/index.vue
  // 拼接成真实的key:/src/views/tableDemo/index.vue
  const realPath = `/src/${filePath}`
  return viewModules[realPath]
}

export function formatAsyncRoutes(menuList: any[]) {
  return menuList.map(menu => {
    return {
      path: menu.path,
      meta: menu.meta || {},
      component: () => import('@/layout/index.vue'),
      children: menu.children.map(child => ({
        path: child.path,
        meta: child.meta || {},
        component: loadView(child.component)
      }))
    }
  })
}

@ 只是 vite 的别名标识,运行时 import.meta.glob 不会识别别名,只识别真实文件物理路径 /src/xxx

这是绝大多数人动态路由页面加载失败的最隐蔽原因

相关推荐
平头哥技术团队19 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
yume_sibai19 小时前
Element Plus 数据展示组件完全指南(15个核心组件)
前端·javascript·vue.js
剑之所向1 天前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
渡我白衣1 天前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
八角丶1 天前
Node 网络编程 —— TLS 模块
javascript·后端·node.js
倔强的石头1061 天前
【Linux指南】动静态库系列(七):符号表与重定位:链接器如何把函数调用接起来
linux·前端·javascript
图扑软件1 天前
中篇・运笔|统一 DataModel 底座,HT UI 组件万物同源
javascript·低代码·ui·性能优化·数据可视化
捷瑞电子工坊1 天前
Ubuntu 终端指令速查手册(持续更新)
linux·ubuntu·教程·开发工具·命令行·速查手册·终端指令
小小尚@1 天前
WebGIS/ECharts 地图开发|MapLand 在线行政区划边界一键下载 GeoJSON 工具
前端·javascript·echarts
葡萄城技术团队1 天前
工业数据可视化:使用活字格 AIcoding + Three.js 构建轻量化三维设备监控大屏
开发语言·javascript·信息可视化