Vue中自动生成路由配置文件覆盖路由配置

本文主要是介绍Vue中自动生成路由配置文件覆盖路由配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vue中自动生成路由配置文件覆盖路由配置

设计思路

  • 读取@/views下所有index.vue如果当前文件下有包含相同路径则认为是它的子路由。
  • 但也不能就这样写死,要创建page.(ts|js)配置文件也可以更改当前的配置,Page.(ts|js)比重大于自动生成的路由配置。

踩坑点

坑点1

这里的'@/views'不能使用变量传入。

(require as any).context('@/views', true, /index\.vue$/)

坑点2

这里如果想对文件进行深度拷贝,直接使用三点(…)是不行的,这里借助了loadsh中的merge完成深度拷贝。

// 导出当前存在的路由并重新赋值
const existingRoute = routeMap[route.path];
// 当前路由存在
if (existingRoute) {const exportRouteConfig = context(fileInfo?.filePath).default;// 使用loadsh合并对象routeMap[route.path] = _.merge(existingRoute, exportRouteConfig);
}

代码编写

在vue中自动生成路由,并将目录下配置文件覆盖到原先路由配置。

import { routeFilenameHelper } from '@/utils/file/routeFileUtil';
import _ from 'lodash';
import { RouteRecordRaw } from 'vue-router';// * 最终路由
const routeMap: Record<string, RouteRecordRaw> = {};// * 所有处理的路由
const contexts = [{ context: (require as any).context('@/views', true, /index\.vue$/), isIndex: true },{ context: (require as any).context('@/views', true, /page\.(ts|js)$/), isIndex: false },
];/*** 构建路由信息* @param context 上下文信息* @param isIndex 是否第一次遍历* @param route 路由内容*/
function buildRouteTree(context: any, isIndex: boolean, route: any) {// 遍历当前子路由context.keys().forEach((item: string) => {// 获取子路由下所有文件对象格式const childrenFileInfo = routeFilenameHelper(item, '/');// 组装子路由对象const childrenRoute: any = {name: childrenFileInfo?.name,path: childrenFileInfo!.path,component: isIndex ? () => import(`@/views${childrenFileInfo?.replaceName}`) : undefined,children: [],meta: { isFullScreen: false },};// 如果当前路由对象等于当前遍历的路由子对象,将子路由推到父级路由中if (childrenFileInfo?.path.includes(route.path) && childrenFileInfo?.path !== route.path) {route.children.push(childrenRoute);}});
}/*** 遍历路由信息* @param context 路由上下文* @param isIndex 是否为索引遍历*/
const createRouteList = (context: any, isIndex: boolean) => {// 遍历文件下所有路径context.keys().forEach((filePath: string) => {const fileInfo = routeFilenameHelper(filePath, '/');// 组装路由对象const route: RouteRecordRaw = {name: fileInfo?.name,path: fileInfo!.path,component: isIndex ? () => import(`@/views${fileInfo?.replaceName}`) : undefined,children: [],meta: { isFullScreen: false },};// * 如果是第一次遍历 初始化赋值if (isIndex) {routeMap[route.path] = route;buildRouteTree(context, isIndex, route);}// * 读取配置文件中内容else {// 导出当前存在的路由并重新赋值const existingRoute = routeMap[route.path];// 当前路由存在if (existingRoute) {const exportRouteConfig = context(fileInfo?.filePath).default;// 使用loadsh合并对象routeMap[route.path] = _.merge(existingRoute, exportRouteConfig);}}});
};// * 生成路由信息
contexts.forEach(({ context, isIndex }) => createRouteList(context, isIndex));// * 返回生成好的路由
export const pageRoutes: Array<RouteRecordRaw> = Object.values(routeMap);

这篇关于Vue中自动生成路由配置文件覆盖路由配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974028

相关文章

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务