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

vue动态获取目录结构进行配置静态路由

文章目录

  • 前言
  • 定义项目页面格式
  • 一、vite 配置动态路由
    • 新建 `/router/utils.ts`
    • 引入 `/router/utils.ts`
  • 二、webpack 配置动态路由
  • 总结
    • `如有启发,可点赞收藏哟~`


前言

项目中动态配置路由可以减少路由配置时间,并可减少配置路由出现的一些奇奇怪怪的问题
路由配置化可统一定义相关属性等
本文记录vitewebppack两种构建工具配置动态路由,


定义项目页面格式

页面定义最好同时定义对应的titlename

  • 以views目录的page-template为例

在这里插入图片描述

  • page-template/index.ts文件
import { defineComponent, h, defineAsyncComponent } from 'vue';const PageComponent = defineAsyncComponent(() => import('./components/index.vue'));export default defineComponent({// 配置后可在 动态获取路由配置中设置对应值title: '页面模版',name: 'PageTemplate',setup() {return () => h(PageComponent);},
});
  • page-template/components/index.ts文件
import { defineComponent } from 'vue'
export default defineComponent({setup() {return {};},
});
  • page-template/components/index.vue文件
<script lang="ts" src="./index.ts" /><template><div>template</div>
</template><style scoped lang="less"></style>

一、vite 配置动态路由

vite使用import.meta.glob动态获取文件

新建 /router/utils.ts

/*** 路由配置文件*/import { DEFAULT_DOCUMENT_TITLE } from '@/const/base';
import type { RouteRecordRaw } from 'vue-router';function getComponent() {return import.meta.glob('../views/**/index.ts', { eager: true });
}// 获取路由文件
export const vueRouters = (): RouteRecordRaw[] => {const routerList: RouteRecordRaw[] = [];const files = getComponent();Object.keys(files).forEach((fileSrc: string) => {const component = files[fileSrc] as any;const componentPath = fileSrc.replace(/^\.\//, '');const routerPath = componentPath.replace('../views', '').replace(/\/index.ts$/, '');if (!componentPath.includes('components')) {routerList.push({path: routerPath,name: component.default.name,component: () => import(/* @vite-ignore */componentPath),meta: {title: component.default.title || DEFAULT_DOCUMENT_TITLE,// skeleton: component.skeleton, // TODO 待处理页面骨架屏// background: component.backgroundColor, // TODO 待处理页面级别颜色},});}});return routerList;
};

引入 /router/utils.ts

/router/index.ts

import { createRouter, createWebHistory } from "vue-router";
import HomeView from "@/views/layout/index";
import { vueRouters } from "./utils";const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [......vueRouters()],
});
export default router;

在这里插入图片描述

二、webpack 配置动态路由

webpack使用require.context获取文件路径

  • /router/utils.ts
/*** 路由配置文件*/import { DEFAULT_DOCUMENT_TITLE } from '@/const/base';
import type { RouteRecordRaw } from 'vue-router';function getComponent() {return require.context('../views', true, /\.ts$/);
}// 获取路由文件
export const vueRouters = (): RouteRecordRaw[] => {const routerList: RouteRecordRaw[] = [];const requireRouters = getComponent();requireRouters.keys().forEach((fileSrc: string) => {const viewSrc = requireRouters(fileSrc);const component = viewSrc.default;const componentPath = fileSrc.replace(/^\.\//, '');const routerPath = componentPath.replace(/(\S+)index.ts$/, '/$1index.html');if (component.name !== 'Home' && !component.isOffLine) {routerList.push({path: routerPath,name: component.name,component: () => import(`@/views/${componentPath}`),meta: {title: component.title || DEFAULT_DOCUMENT_TITLE,},});}});return routerList;
};export default vueRouters();

使用同vite


总结

vite 和 webpack 不同于获取文件格式,获取后的操作基本一致

如有启发,可点赞收藏哟~

相关文章:

vue动态获取目录结构进行配置静态路由

文章目录 前言定义项目页面格式一、vite 配置动态路由新建 /router/utils.ts引入 /router/utils.ts 二、webpack 配置动态路由总结如有启发&#xff0c;可点赞收藏哟~ 前言 项目中动态配置路由可以减少路由配置时间&#xff0c;并可减少配置路由出现的一些奇奇怪怪的问题 路由…...

产品工程师工作的职责十篇(合集)

一、岗位职责的作用意义 1.可以最大限度地实现劳动用工的科学配置; 2.有效地防止因职务重叠而发生的工作扯皮现象; 3.提高内部竞争活力&#xff0c;更好地发现和使用人才; 4.组织考核的依据; 5.提高工作效率和工作质量; 6.规范操作行为; 7.减少违章行为和违章事故的发生…...

图片降噪软件 Topaz DeNoise AI mac中文版功能

Topaz DeNoise AI for Mac是一款专业的Mac图片降噪软件。如果你有噪点的相片&#xff0c;可以通过AI智能的方式来处理掉噪点&#xff0c;让照片的噪点降到最 低。有了Topaz DeNoise AI mac版处理图片更方便&#xff0c;更简单。 Topaz DeNoise AI mac软件功能 无任何预约即可在…...

【开源】基于Vue.js的车险自助理赔系统的设计和实现

项目编号&#xff1a; S 018 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S018&#xff0c;文末获取源码。} 项目编号&#xff1a;S018&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…...

2023年亚太杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…...

Android:Google三方库之Firebase集成详细步骤(一)

前提条件 安装最新版本的 Android Studio&#xff0c;或更新为最新版本。使用您的 Google 账号登录 Firebase请注意&#xff0c;依赖于 Google Play 服务的 Firebase SDK 要求设备或模拟器上必须安装 Google Play 服务 将Firebase添加到应用&#xff1a; 方式&#xff1a;使用…...

企业如何选择一款高效的ETL工具

企业如何选择一款高效的ETL工具? 在企业发展至一定规模后&#xff0c;构建数据仓库&#xff08;Data Warehouse&#xff09;和商业智能&#xff08;BI&#xff09;系统成为重要举措。在这个过程中&#xff0c;选择一款易于使用且功能强大的ETL平台至关重要&#xff0c;因为数…...

vr编辑器可以解决教育教学中的哪些问题

VR编辑器是一种基于虚拟现实技术的教育内容编辑器&#xff0c;可以帮助教师快速创建出高质量的虚拟现实教学内容。 比如在畜牧教学类&#xff0c;通过这个软件&#xff0c;教师可以将真实的动物场景、行为和特征模拟到虚拟现实环境中&#xff0c;让学生在沉浸式的体验中学习动物…...

国外聊天IM — Sendbird

接⼝⽂档&#xff1a; https://sendbird.com/docs 好久没写文章了 我在官网找到的pom, 下载不下来&#xff0c;git下载下来&#xff0c;打进项目里不能用&#xff0c;就只能用简单的http了 直接上代码&#xff0c;只是简单的调通代码&#xff0c;根据你自己业务改&#xff1a;…...

Django与Ajax

目录 一、什么是Ajax 二、Ajax引入 案例 小结 三、前后端数据传输的编码格式(contentType) 【1】form表单 【2】编码格式 【3】Ajax 【4】代码演示 四、Ajax发送JSON格式数据 【1】引入 【2】后端 【3】总结 五、Ajax提交文件数据 【发送文件数据的格式】 【结…...

linux日志不循环问题诊断

有一台Linux虚拟机的messages日志文件自2023年7月下旬开始没有按周为周期重新生成新的日志&#xff0c;一直累积在同一个messages文件中&#xff0c;如下所示&#xff1a; [root logrotate.d]# ls -l /var/log|grep me -rw-r--r-- 1 root root 107170 Nov 15 1…...

Golang版本处理Skywalking Trace上报数据

Tips: 中间记录了解决问题的过程&#xff0c;如不感兴趣可直接跳至结尾 首先去es里查询skywalking trace的元数据 可以拿到一串base64加密后的data_binary(直接解密不能用&#xff0c;会有乱码&#xff0c;可参考https://github.com/apache/skywalking/issues/7423) 对data_b…...

【开源】基于Vue和SpringBoot的教学过程管理系统

项目编号&#xff1a; S 054 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S054&#xff0c;文末获取源码。} 项目编号&#xff1a;S054&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2…...

【python学习】中级篇-图形界面-内置库Tkinter,用于创建图形用户界面(GUI)

Tkinter是Python的一个内置库&#xff0c;用于创建图形用户界面(GUI)。 以下是一个简单的Tkinter用法示例&#xff1a; import tkinter as tkdef on_click():label.config(text"你好&#xff0c;" entry.get())# 创建主窗口 root tk.Tk() root.title("Tkinte…...

【开源】基于JAVA的快递管理系统

项目编号&#xff1a; S 007 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S007&#xff0c;文末获取源码。} 项目编号&#xff1a;S007&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快…...

伦敦银涨1%内银涨多少才能持平

伦敦银的价格走势是全球白银市场的价格指标&#xff0c;世界上其他主要的白银市场的价格走势&#xff0c;都是以它作为标杆并紧密的跟随。如果排除汇率的因素&#xff0c;伦敦银价格上涨百分之一&#xff0c;国内的白银价格理论上也会上涨接近的水平。 但不同市场上的白银价格&…...

Linux:进度条(小程序)以及git三板斧

Linux小程序&#xff1a;进度条 在实现小程序前我们要弄清楚&#xff1a; 1.缓冲区&#xff1b; 2.回车与换行。 缓冲区&#xff1a; 分别用gcc来编译下面两个程序&#xff1a; 程序一&#xff1a; #include <stdio.h> int main() { printf("hello Makefil…...

CSS-表格属性(1)

边框相关属性&#xff08;其他元素也能用&#xff09;&#xff1a; 属性名&#xff1a;border-style功能&#xff1a;边框风格可选值&#xff1a; 1.none 默认值(无边框) 2.solid 实线 3.dashed 虚线 4.dotted 点线 5.double 双实线 border-style: dashed; 属性名&#xff1a…...

html在线生成二维码(附源码)

文章目录 1.设计来源1.1 主界面1.2 美化功能 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134458927 html二维码生成&#xff08;附源码&#xff09;&#xff0c;生成二…...

POS系统完整体系的介绍 Pos终端主密钥MK、DUKPT、PEK、DEK、MEK、TUSN的含义 ---安全行业基础篇7

POS系统完整体系的介绍 销售点终端&#xff08;POS机&#xff09;是零售和服务行业中用于处理销售和交易的关键技术。POS系统不仅涉及支付处理&#xff0c;还包括库存管理、顾客关系管理、数据分析等多个方面。下面是POS系统完整体系的介绍&#xff1a; 1. 硬件组件 终端机&…...

桥梁与翻译器:VRM Addon for Blender在虚拟角色创作中的哲学意义

桥梁与翻译器&#xff1a;VRM Addon for Blender在虚拟角色创作中的哲学意义 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.1 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender 在数字创作的…...

Chrome浏览器中Markdown文档的终极预览方案:markdownReader插件完整指南

Chrome浏览器中Markdown文档的终极预览方案&#xff1a;markdownReader插件完整指南 【免费下载链接】markdownReader markdownReader is a extention for chrome, used for reading markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownReader 还在为…...

专业级B站视频下载工具:BBDown 5大核心优势深度解析

专业级B站视频下载工具&#xff1a;BBDown 5大核心优势深度解析 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown是一款开源命令行式Bilibili视频下载器&#xff0c;专为技术爱好…...

Android Framework开发深度解析与面试指南

引言 Android Framework是Android系统的核心层,负责管理应用生命周期、资源分配和硬件交互。它为上层应用提供基础服务,如Activity管理、Binder IPC和内存回收。在物联网时代,Framework优化对设备性能至关重要。本文将深入探讨Framework核心机制,并提供实用面试指南,帮助…...

轻量AI驱动实时建模,镜像视界定义下一代数字孪生

轻量AI驱动实时建模&#xff0c;镜像视界定义下一代数字孪生——镜像视界新一代轻量化数字孪生技术白皮书前言当前数字孪生产业正面临一场深刻的范式转型&#xff1a;传统数字孪生依赖重型硬件、密集人工、离线建模、高算力支撑&#xff0c;普遍存在部署重、成本高、周期长、动…...

Linux上Java 17用Hutool国密SM4报错?别慌,OpenJDK 17一键切换保姆级教程

Linux上Java 17用Hutool国密SM4报错&#xff1f;OpenJDK 17切换实战指南 当你满怀信心地将本地调试通过的国密SM4加密代码部署到Linux生产环境时&#xff0c;突然跳出的SecurityException: JCE cannot authenticate the provider BC就像一盆冷水浇下来。这种从开发环境到生产环…...

2026年相城木托盘回收,厂家直收省心又划算

在仓储物流行业&#xff0c;木托盘是必不可少的周转工具&#xff0c;但大量闲置托盘堆积在仓库角落&#xff0c;不仅占用空间&#xff0c;还增加管理成本。2026年&#xff0c;苏州相城地区的企业发现&#xff0c;与其找零散回收商低价处理&#xff0c;不如直接联系厂家直收。以…...

如何用 Copilot CLI 统一对接 GPT、Claude 等多种 AI 模型

如何用 Copilot CLI 统一对接 GPT、Claude 等多种 AI 模型 在 AI 应用开发中&#xff0c;如何用统一的接口对接 GPT、Claude 等多种模型&#xff1f;本文分享基于 Orleans Grain 架构的 AI 提供商系统设计&#xff0c;以及 GitHub Copilot CLI 的集成实践经验。 背景 在现代 A…...

快速上手tchMaterial-parser:国家中小学智慧教育平台电子课本下载终极指南

快速上手tchMaterial-parser&#xff1a;国家中小学智慧教育平台电子课本下载终极指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课…...

利用快马ai快速原型设计,一键生成微pe环境下的系统自动化部署脚本

今天想和大家分享一个特别实用的技术实践——如何用InsCode(快马)平台快速生成Windows PE环境下的系统自动化部署脚本。这个需求源于我最近频繁帮朋友重装系统&#xff0c;每次手动操作太耗时&#xff0c;于是尝试用AI生成脚本实现一键部署。 需求场景分析 微PE作为轻量级Windo…...