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

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2 文本分类入门:TextCNN

论文链接:https://arxiv.org/pdf/1408.5882.pdf TextCNN 是一种用于文本分类的卷积神经网络模型。它在卷积神经网络的基础上进行了一些修改,以适应文本数据的特点。 TextCNN 的主要思想是使用一维卷积层来提取文本中的局部特征,并通过池化操…

拥抱变化,良心AI工具推荐

文章目录 💥 简介🍄 工具介绍🍓 功能特点🥗 使用场景🎉 用户体验🧩 下载地址🍭 总结 💥 简介 我是一名资深程序员,但薪资缺对不起资深两个字,为了生存&#x…

【开源威胁情报挖掘3】开源威胁情报融合评价

基于开源信息平台的威胁情报挖掘综述 写在最前面5. 开源威胁情报关联分析5.1 开源威胁情报网络狩猎:技术、方法和最新研究应用实例和未来方向 5.2 开源威胁情报态势感知关键技术和方法应用实例和未来方向 5.3 开源威胁情报恶意检测关键技术和方法应用实例和未来方向…

系列十七、理解SpringBoot中的starter 自定义一个starter

一、概述 作为后端Java程序员,基本上公司的日常开发都是基于SpringBoot进行的,我们使用SpringBoot也是沉醉于它的各种各样的starter带给我们的便利,这些starter为我们带来了众多的自动化配置,通过这些自动化配置,我们可…

晨曦记账本:掌握技巧,轻松统计交通支出“

你是否曾经为了统计交通支出而烦恼?现在,我们为你推荐晨曦记账本,让你轻松掌握技巧,快速统计上个月交通支出。 首先第一步,我们要进入晨曦记账本并在上方功能栏里选择“查看方式”。并在弹出来的列表里选择“所有记录…

教你5步学会用Llama2:我见过最简单的大模型教学

在这篇博客中,Meta 探讨了使用 Llama 2 的五个步骤,以便使用者在自己的项目中充分利用 Llama 2 的优势。同时详细介绍 Llama 2 的关键概念、设置方法、可用资源,并提供一步步设置和运行 Llama 2 的流程。 Meta 开源的 Llama 2 包括模型权重和…

力扣每日一题day24[150. 逆波兰表达式求值]

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 、-、* 和 / 。每个操作数(运算对象)都可以是一个整数或者另一个表达式。两个…

oracle sql相关语法

SQL*PLUS 在SQL*PLUS执行,会在执行后显示查询的执行计划和统计信息 SET AUTOTRACE ON;SELECT * FROM your_table WHERE column_name value;SET AUTOTRACE OFF;PLSQL PLSQL查询sql界面,鼠标右键,点击执行计划,会出现sql的执行计…

非功能关键知识总结(一)

文章目录 一、稳定性(一)、服务级别协议1、SLA2、OLA3、UC (二)、可用性指标(三)、突发事件等级 三、质量(一)、千行代码缺陷数量(二)、软件质量模型的发展(三)、产品质量模型 四、安全(一)、网络安全 五、灾备(一)、灾备指标(二)、灾难恢复等级(三)、容灾技术分类 一、稳定性 …

V8引擎类型转换(VIP课程)

这一章是源于一道面试题 完成以下条件并且输出console if(a 1 && a 2 && a 3) {console.log(true) }好家伙 乍一看一个变量怎么可能等于三个值?带着疑问我们去深入了解 类型系统 在JavaScript中类型系统不同于别的语言,例如JavaSc…

【1】基于多设计模式下的同步异步日志系统-项目介绍

1. 项目介绍 本项⽬主要实现⼀个日志系统, 其主要支持以下功能: • 支持多级别日志消息 • 支持同步日志和异步日志 • 支持可靠写⼊日志到控制台、文件以及滚动文件中 • 支持多线程程序并发写日志 • 支持扩展不同的日志落地⽬标地 2. 开发环境 • CentOS 7 • vs…

免费网站快速收录工具,2023最新网站收录方法

在当今数字化时代,拥有一个被搜索引擎快速收录的网站对于个人、企业或机构而言至关重要。网站的快速收录意味着更广泛的曝光和更多的访问流量,这对于网络存在的任何实体都是非常有价值的。 网站快速收录的重要性 在庞大的互联网世界中,一切…

汇编学习记录

前言 这篇文章是自己在专升本录取~本科开学前学习记录,破解软件的学习在2022年4月 - 2022年5月,汇编学习时间大约为2022年7月 - 2022年9月,我将往期上传的博文整理为一篇文章,作为归纳总结。 以后若继续学习相关领域,此…

003、应用程序框架-UIAbility

之——UIAbility 目录 之——UIAbility 杂谈 正文 1.UIAbility 2.基本使用 2.1 创建Ability工程 2.2 添加基础功能 2.3 新建页面 2.4 页面间的跳转 3.生命周期 总结 杂谈 UIAbility,其中的页面创建、页面间的跳转、数据传递、生命周期。 正文 1.UIAbil…

【Android】MMKV实现本地持久化

引入 (测试操作机器是华为Mate 20 Pro 128G,Android 10,每组重复1k次,时间单位是ms) 可以看出MMKV的耗时比其他耗时少的离谱。再看多进程下的性能: 不必多说。再看和DataStore的对比: 简介 根据MMKV官方文档所言 MM…

波奇学C++:智能指针(二):auto_ptr, unique_ptr, shared_ptr,weak_ptr

C98到C11:智能指针分为auto_ptr, unique_ptr, shared_ptr,weak_ptr,这几种智能都是为了解决指针拷贝构造和赋值的问题 auto_ptr:允许拷贝,但只保留一个指向空间的指针。 管理权转移,把拷贝对象的资源管理权转移给拷贝…

深度学习记录--计算图(前向后向传播)

什么是计算图? 从一个例子入手: 将函数J的计算用流程图表示出来,这样的流程图被称为计算图 简单来说,计算图是用来显示每个变量间的关系的一种图 两种传播方式 计算图有两种传播方式:前向传播 和 后向传播 什么是前…

手写VUE后台管理系统7 - 整合Less样式

整合LESS 安装使用 Less(Leaner Style Sheets),是一门向后兼容的 CSS 扩展语言。 Less 官网:https://less.bootcss.com/ 安装 yarn add less安装完成就可以直接使用了 使用 以文件形式定义全局样式 在 assets 目录下创建 less …

精准长尾关键词批量挖掘工具,长尾关键词挖掘正确使用方法

互联网时代,SEO已然成为网站推广的关键一环。而在SEO的世界里,长尾关键词无疑是一块被广泛忽视却蕴含着巨大潜力的宝地。 什么是长尾关键词 长尾关键词,指的是那些相对不那么热门、搜索量较低但更为具体、更贴近用户真实需求的关键词。与短…

JAVAEE 初阶 多线程基础(五)

可重入锁 死锁 内存可见性问题 一 可重入锁二.死锁场景1. 一个线程一把锁场景2. 两个线程两把锁场景3. n个线程m把锁(哲学家就餐问题) 三.Java库中的标准类四.内存可见性问题 一 可重入锁 谈到可重入锁,需要再次回顾线程安全问题原因 1.根本原因:线程的抢占式执行,随机调度 2.多…