当前位置: 首页 > news >正文

vite脚手架,手写实现配置动态生成路由

参考文档 vite的glob-import

  • vue路由配置基本都是重复的代码,每次都写一遍挺难受,加个页面就带配置下路由
    那就利用 vite 的 文件系统处理啊

先看实现效果

请添加图片描述

1. 考虑怎么约定路由,即一个文件夹下,又有组件,又有页面,怎么区分它们,这就需要提前约定好

如下:约定 以 index.vue 结尾的就是路由,其它都认为是组件, 目录结构如下, 这里我放入 views目录下

├─src├─views	├─about├─index.vue  # 认为是页面├─page.ts    # 对这个页面的配置,例如meta中的信息		├─home├─index.vue├─page.ts├─mine├─index.vue├─page.ts└─other├─info├─index.vue├─page.ts└─pick├─index.vue├─page.ts├─index.vue├─page.ts
  • page.ts [ 约定为 配置文件,主要赋值给 meta 属性,它默认导出一个对象]
export default {title: "关于",name: "xxx",auth: true
}

2 找到views 目录下,带 page.ts 的文件,它就是你要的页面

// 获取每个页面的配置参数 [后边传参啥意思,顶部点击glob的文档]
const configPage = import.meta.glob('../views/**/page.ts', {import: 'default',eager: true,
})

3 再找到以index.vue 结尾的文件,这是路由要渲染的组件

// 获取views文件夹下所有.vue文件,最终组成想要的路由
const vuePage = import.meta.glob('../views/**/index.vue')
// 这个打印出来是个这种格式
// {
//   ../views/home/index.vue : () => import("/src/views/home/index.vue")
// }

注: ** 的意思是为了获取所有文件,顶部点文档查看

4 接着就是组装每个路由了

export const routes = Object.entries(configPage).map(([tsPath, config]: any) => {let path = tsPath.replace('../views', '').replace('/page.ts', '') || '/'let name = path.split('/').filter(Boolean).join('')// 通过这个key 再 vuePage 变量中获取对应的路径let pageKey = tsPath.replace('page.ts', 'index.vue')// 返回单个路由文件配置return {path,name,meta: config,component: vuePage[pageKey],}}
)

最后导出路由 ,这里放了layout

const router = createRouter({history: createWebHistory(),routes: [{path: '/',component: () => import('./../layout/index.vue'),children: [...routes],},],
})
export default router

请添加图片描述

http://www.lryc.cn/news/251599.html

相关文章:

  • 解决浏览器缓存问题
  • 【数据中台】开源项目(2)-Davinci可视应用平台
  • Java实现简单飞翔小鸟游戏
  • numpy实现神经网络
  • Bean的加载控制
  • 使用 OpenCV 识别和裁剪黑白图像上的白色矩形--含源码
  • LeetCode 每日一题 Day1
  • 【hacker送书活动第7期】Python网络爬虫入门到实战
  • 【算法】希尔排序
  • 四、Zookeeper节点类型
  • arcgis导出某个属性的栅格
  • 计算机网络——传输层
  • 策略设计模式
  • Golang中rune和Byte,字符和字符串有什么不一样
  • 实施工程师运维工程师面试题
  • 6-13连接两个字符串
  • Linux中的文件IO
  • 深度学习记录--初识向量化
  • 树与二叉树堆:经典OJ题集(2)
  • Java面试题(每天10题)-------连载(40)
  • 2023年【起重机司机(限桥式起重机)】报名考试及起重机司机(限桥式起重机)考试资料
  • Linux的基本指令(3)
  • C语言memcpy,memmove的介绍及模拟实现
  • 克服.360勒索病毒:.360勒索病毒的解密和预防
  • 21、Resnet50 中包含哪些算法?
  • pybind11教程
  • Java基础- 自定义类加载器
  • 2022年高校大数据挑战赛A题工业机械设备故障预测求解全过程论文及程序
  • 洛谷 P1998 阶乘之和 C++代码
  • 洛谷 B2006 地球人口承载力估计 C++代码