分享Vue3中的一个路由加载函数,基于Glob导入模式,根据路径自动生成路由

哈喽,大家好!我是「励志前端小黑哥」,我带着最新发布的文章又来了!

专注前端领域10年+,专门分享那些没用的前端知识!

今天要分享的内容,是一段路由加载的函数代码,这段代码能自动读取目录中的*.vue文件,并将他们自动组装成Vue3的路由。

前言

在现代前端开发中,单页面应用(SPA)已成为主流,Vue.js作为一个轻量级且功能强大的前端框架,被广泛应用于各种项目中。

在Vue3中,Vue Router是其官方提供的路由管理器,用于处理不同视图之间的切换。在大型项目中,手动定义所有路由可能会变得繁琐且容易出错。

因此,编写一个能够根据文件结构自动生成路由的函数,可以极大地提高开发效率。本文将分享一个这样的函数,希望对你有所帮助。

需求分析

假设我们有这么一个目录结构

文章配图

那我们的需求就是,将目录结构转换为如下可访问的链接:

http://host/car
http://host/device
http://host/env
http://host/index
http://host/people
......

技术点

  1. Vue3 和 Vue Router:Vue3 提供了更强大的组合式 API,Vue Router 也进行了相应的更新,支持更好的类型检查和模块化管理。
  2. 文件遍历:使用Vite的 import.meta.glob 函数来遍历项目目录,获取所有组件文件路径。
  3. 动态路由生成:根据获取的文件路径,动态生成 Vue Router 的路由配置。

实现步骤

1. autoImportVueRouter函数的实现代码

下面我在项目中使用的示例代码,用于根据指定目录下的 Vue 组件文件自动生成路由配置。

// file: autoImportVueRouter.tsexport default function autoImportVueRouter () : Array<VueRouter.RouteRecordRaw> {// 加载views下的所有文件,注意:这里的路径`@`const views = import.meta.glob('@/views/**/**.vue')// 标识index.vue路径是否存在   let indexExist = falseconst subRouter: Array<VueRouter.RouteRecordRaw> = Object.keys(views).map(function (key:string) {const component = views[key]const path = key.toLowerCase().replace(/\.vue$/, '').replace(/.+\/views/g, '')if (path === '/index') indexExist = truereturn {path,component}})// 标识index.vue路径必须存在,否则首页不知道往跳转if (!indexExist) throw new Error('src/views目录下必须存在Index.vue')return subRouter
}

上面函数的关键代码就是import.meta.glob('@/views/**/**.vue'),它能从文件系统中导入多个模块。

这里是该函数的介绍:https://vitejs.cn/vite5-cn/guide/features.html#glob-import

2. 该函数内的注意点

另外需要注意的一个点,是路径'@/views/**/**.vue'中的@符号,它需要在vite.config.ts中进行别名的配置。如果使用ts,还需要在tsconfig.json中进行配置,这样才能排除相对路径对函数引用造成的影响。比如,

import { defineConfig } from 'vite'
import * as path from 'node:path'export default defineConfig({resolve: {alias: {// 别名'@': path.resolve(__dirname, 'src')}}//...其他配置
})

3. 函数引用

在 Vue Router 配置文件中使用这个生成的路由:

import * as VueRouter from 'vue-router'
import autoImportVueRouter from './autoImportVueRouter'const router = VueRouter.createRouter({history: VueRouter.createWebHistory('/'),routes: [// 首页重定向,配合autoImportVueRouter函数内的if判断{path: '/',redirect: '/index'},// 使用路由...autoImportVueRouter(),// 其他路由全部返回404{path: '/:pathMatch(.*)*',redirect: '/404'}]
})export default router;

至此,整个调用流程就实现了,后续无论新增/删除了什么文件,再次打包构建之后,我们都不需要再去修改维护我们的路由模块了。

对于大型项目,或者一部分懒人,这个方式引入路由非常的方便!

举一反三

通过vite的glob的多模块导入功能,我们还可以做更多的事情。比如,

  1. 全局组件自动加载:与路由的差别只是将路由变成了组件,然后利用组件的全局注册功能,将组件自动加载到项目中,方便其他各个页面调用。
  2. 批量导入多个图片/资源:图片或其他资源也可以类似操作,然后在脚本中拿到它们,这在做图片循环的时候也是比较常用的。
  3. 项目所有内容全部批量导入,构造一个基于配置的项目架构:无论图片、模块、路由等,全部可以通过glob导入,这样就可以根据自身项目情况来解析它们,将其抽离成配置文件后,就形成了一套固定的开发流程。如果想要完全掌控项目,这么做是非常有必要的。

结语

通过上述方法,我们可以实现 Vue3 项目中根据文件路径自动生成路由的功能,这不仅减少了手动配置路由的工作量,还提高了项目的可维护性和可扩展性。

希望这个函数能对你的 Vue3 项目开发有所帮助,让你在构建大型单页面应用,或者组件的管理过程中,更加得心应手。

PS:文章看完了,如果本文对你有所帮助,请点赞、收藏,这样能让更多人知道!

励志前端小黑哥,全网唯一账号!
关注我,带你了解更多前端知识!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Three.js实现小米 su7 压缩后的模型加载

Three.js实现小米 su7 压缩后的模型加载 预览&#xff1a; https://threehub.cn/#/codeMirror?navigationThreeJS&classifybasic&idgltfOptLoader import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js impo…

复旦大学全球供应链研究中心揭牌,合合信息共话大数据赋能

10月13日&#xff0c;复旦大学全球供应链研究中心&#xff08;以下简称“中心”&#xff09;揭牌仪式在复旦大学管理学院政立院区隆重举行。我国的供应链体系庞大复杂&#xff0c;在百年未有之大变局下&#xff0c;保障产业链供应链安全已成为我国的重要战略目标。中心的设立旨…

打造企业数字化转型的未来蓝图:架构蓝图的构建与实施策略深度解析

随着数字经济的蓬勃发展&#xff0c;全球企业正在经历前所未有的变革与挑战。企业的运营模式、客户体验和市场竞争格局都在迅速变化。为了应对这些挑战&#xff0c;企业必须从战略到技术层面进行深度重塑&#xff0c;架构蓝图的构建和实施是数字化转型过程中不可或缺的工具。架…

CSS - grid制作表格

1. grid-template-columns&#xff1a;网格布局中的列的数量&#xff0c;也可以设置列的宽度 .grid-container {display: grid;grid-template-columns: 80px 200px auto 40px; }.grid-container {display: grid;grid-template-columns: auto auto auto auto;//表示所有列的宽度…

Starrocks部署前期准备

前提条件 硬件要求 CPU StarRocks 依靠 AVX2 指令集充分发挥其矢量化能力。因此&#xff0c;在生产环境中&#xff0c;强烈建议您将 StarRocks 部署于 x86 架构 CPU 的服务器上。 您可以在终端中运行以下命令来检查 CPU 是否支持 AVX2 指令集&#xff1a; cat /proc/cpuin…

高效评优:基于SpringBoot的学生奖励管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理学生评奖评优管理系统的相关信息成为必然。…

[JAVAEE] 线程安全问题

目录 一. 什么是线程安全 二. 线程安全问题产生的原因 三. 线程安全问题的解决 3.1 解决修改操作不是原子性的问题 > 加锁 a. 什么是锁 b. 没有加锁时 c. 加锁时 d. 死锁 e. 避免死锁 3.2 解决内存可见性的问题 > volatile关键字 (易变的, 善变的) a. 不加…

古埃及象形文字在线字典

我在个人网站“小孔的埃及学站点”上推出了在线的象形文字字典&#xff0c;总共收罗了将近700条的象形文字&#xff08;词&#xff09;。在线字典的使用方法很简单&#xff0c;在网站各大版块首页的右上方会有如下图所示的查询入口。 点击文本框&#xff0c;输入中文或英文关键…

百度文心一言接入流程-java版

百度文心一言接入流程-java版 一、准备工作二、API接口调用-java三、百度Prompt工程参考资料: 百度文心一言:https://yiyan.baidu.com/百度千帆大模型:https://qianfan.cloud.baidu.com/百度千帆大模型文档:https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html千tokens…

使用API有效率地管理Dynadot域名,通过域名命令删除域名服务器(NS)

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

<Project-11 Calculator> 计算器 0.4 公制单位转换器 Metric Units Converter HTML JS

前言 这个参考的是时间转换器 &#xff1c;Project-11 Calculator&#xff1e; 计算器 0.1时间换算器 Time Conversion Calculator-CSDN博客&#xff0c;主要就是替换内容&#xff0c;相当于找不同。 改新内容 index.html 加了新页面链接 添加了 favicon.jpg 橘猫 就当是…

Qt开发-----线程调度

目录 前言 一、Linux下查看进程的情况 二、线程的创建 三、多线程的创建和使用 前言 以下引用内容源自正点原子Qt开发指南文档。 我们写的一个应用程序&#xff0c;应用程序跑起来后一般情况下只有一个线程&#xff0c;但是可能也有特殊情况。比如我们前面章节写的例程都跑…

让你的单细胞数据动起来!|iCellR(一)

今天在翻阅single cell 的github时候&#xff0c;我看见了这个R包&#xff0c;允许我们处理各种来自单细胞测序技术的数据&#xff0c;如scRNA-seq&#xff0c;scVDJ-seq和CITE-Seq。 单细胞转录组教程汇总 想看整套的学习流程还可以戳这里&#xff1a; https://vimeo.com/3…

CSS综合案例——新闻详情

一、知识点 1、文字颜色 属性名&#xff1a;color 属性值&#xff1a; 颜色表示方式属性值说明使用场景颜色关键字颜色英文单词red,green,blue学习测试rgb表示法rg(r,g,b)r,g,b表示红绿蓝三原色&#xff0c;取值0-255了解rgba表示法rgba(r,g,b,a)a表示透明度&#xff0c;取…

sed工具的基本使用

文章目录 sed工具介绍什么是sed工具&#xff0c;有什么用sed命令执行流程sed是按行读取文件的每当读取一行内容&#xff0c;都会进行一次判断&#xff0c;判断是否是想要的行默认不实质改变文件内容&#xff0c;仅临时输出给用户看&#xff08;除非加-i选项&#xff09;例1 例2…

1024 程序员节:代码铸就的科技传奇,节日快乐

一、1024 程序员节的起源与发展 国际程序员节起源于俄罗斯&#xff0c;其设立的日期是每年的第 256 天&#xff0c;平年为 9 月 13 日&#xff0c;闰年为 9 月 12 日。256 这个数字对程序员来说意义非凡&#xff0c;1 个字节等于 8 位元&#xff0c;最多能表示 256 个数值&…

[LeetCode] 230. 二叉搜索树中第K小的元素

题目描述&#xff1a; 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;1示例 2&am…

河源市社保卡照片要求及手机自拍拿数码相片回执的方法

河源市的居民在申请或更新社保卡时&#xff0c;需要提交一张符合特定要求的照片。如果您需要更新或申请社保卡&#xff0c;本文将为您详细介绍河源市社保卡照片的规格要求&#xff0c;并指导您如何通过手机自拍获取符合标准的社保卡照片及回执。 根据河源市社保局的指南&#x…

jconsole或者jvisual连接服务器Java进程

java -Djava.rmi.server.hostname你的ip-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port一个新的端口&#xff0c;不能和项目端口一样-Dcom.sun.management.jmxremote.sslfalse -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.j…

深度解读:Spring.3版本自动装配机制的演变与实践

前言 今天&#xff0c;我们将开启对Spring-AI系列源码的讲解。请大家不急不躁&#xff0c;我会逐步深入&#xff0c;每次专注于一个知识点&#xff0c;以防让人感到困惑。 首先&#xff0c;源码的讨论自然离不开自动装配。有人可能会问&#xff0c;之前已经讲解过这个内容了&…