前言

做 Vue 开发脱离不了路由,尤其是中大型项目,页面多且杂,在配置路由的时候总是会变得逐渐暴躁,因为费时,并且又没有什么太多技术含量,总觉得是在浪费时间。

另外如果接手了别人的项目,当业务有变更,或者测试反馈有 bug 。通常需要先要根据页面 URL 去找到对应配置的路由,然后对照 component 参数对应的 .vue 文件,操作繁琐,效率也不高。

那有没有一种办法可以根据 .vue 文件自动生成路由,并且路由的 path 就是文件所在的文件夹路径,这样即节省了路由配置的时间,也提高了根据 URL 定位页面文件的效率。

经过我的一番查找,还真找到了,就是下面这两个插件:

使用

安装

从这两款插件的名字可以看出,这俩是 vite 的插件,并且仅支持 Vue3 ,那我就搬出我的 Fantastic-template 项目模版拿来测试了。

首先先安装依赖。因为模版里自带了 vue-router ,所以不需要再安装。

pnpm add vite-plugin-pages vite-plugin-vue-layouts -D

安装好依赖后,需要在 vite.config.js 里进行配置,由于这两个插件作用不同,我们一个个来介绍如何使用。

vite-plugin-pages

这个是本次介绍的核心,它能够将文件系统生成对应的路由,从而省去手动配置路由的时间。

首先在 vite.config.js 增加以下配置:

import Pages from 'vite-plugin-pages'

export default {
plugins: [
Pages({
dirs: 'src/views', // 需要生成路由的文件目录
exclude: ['**/components/*.vue'] // 排除在外的目录,即不将所有 components 目录下的 .vue 文件生成路由
})
]
}

目前只需要配置这 2 个参数就够了,其它还有更多参数可以去 vite-plugin-pages 项目页了解。

接着在页面中引入就可以使用了。

import { createRouter } from 'vue-router'
import routes from '~pages' const router = createRouter({
// ...
routes
})

没错,就是这么简单,当然也有一些高阶用法。比如通过 params 传参的路由,要怎么配置呢?

在 vite-plugin-pages 里提供了一种专用的写法,就是 [ ] 。例如 src/views/example/[id].vue 这个文件,最终生成的路由 path 就是 /example/:id

针对 404 页面,我们可以在创建个这样的文件 src/views/[...all].vue ,它生成的路由就是 /:all(.*)*

除此之外,我们还可以在 .vue 文件中增加 <route></route> 代码块,这里面默认接收 json5 格式的路由配置。需要注意的是,如果在 <route></route> 里配置了 pathname ,将会覆盖自动生成的 pathname

<route>
{
path: '/xxx/yyy',
name: 'zzz',
meta: {
title: 'test page'
}
}
</route> <template>
<div>
This is a test page.
</div>
</template>

这时候似乎还缺点什么,对的,那就是嵌套路由。通过 vite-plugin-pages 自动生成的路由,都是一级路由。而实际项目开发中,我们会使用嵌套路由的特性,搭配 <router-view></router-view> 组件实现一些布局效果。

这时候就要介绍下面这款插件了

vite-plugin-vue-layouts

首先在 vite.config.js 修改下配置:

import Pages from 'vite-plugin-pages'
import Layouts from 'vite-plugin-vue-layouts' export default {
plugins: [
Pages({
dirs: 'src/views', // 需要生成路由的文件目录
exclude: ['**/components/*.vue'] // 排除在外的目录,即所有 components 目录下的 .vue 文件都不会生成路由
}),
Layouts({
layoutsDirs: 'src/layout', // 布局文件存放目录
defaultLayout: 'index' // 默认布局,对应 src/layout/index.vue
})
]
}

更多配置参数请查看 vite-plugin-vue-layouts 项目页。

也还是一样,配置好后,就可以直接使用了。

import { createRouter } from 'vue-router'
import { setupLayouts } from 'virtual:generated-layouts'
import generatedRoutes from 'virtual:generated-pages' const routes = setupLayouts(generatedRoutes) const router = createRouter({
// ...
routes
})

这个插件只做一件事,就是把通过 vite-plugin-pages 生成的一级路由处理成嵌套路由,大概就是这样:

// 处理前
{
path: '/login',
component: () => import('/src/views/login.vue'),
name: 'login'
} // 处理后
{
path: '/login',
component: () => import('/src/layout/index.vue'),
children: [
{
path: '',
component: () => import('/src/views/login.vue'),
name: 'login'
}
]
}

如果你有多种布局,可以在 <route><route> 里进行设置:

<route>
{
meta: {
layout: 'other'
}
}
</route>

甚至还可以做一些魔改,比如项目中有的路由是需要用到布局页面的,有的则不需要,那我们可以将不需要的页面设置为 layout: false

<route>
{
meta: {
layout: false
}
}
</route>

同时在路由文件处使用下面这段代码:

import { createRouter } from 'vue-router'
import { setupLayouts } from 'virtual:generated-layouts'
import generatedRoutes from 'virtual:generated-pages' let routes = []
generatedRoutes.forEach(v => {
routes.push(v?.meta?.layout != false ? setupLayouts([v])[0] : v)
}) const router = createRouter({
// ...
routes
})

总结

通过下面这张图配合总结吧:

文件系统                           路由地址                          路由 name

views
├─ example
│ ├─ components
│ │ └─ List
│ │ └─ index.vue
│ ├─ params
│ │ └─ [id].vue /example/params/:id example-params
│ ├─ axios.vue /example/axios example-axios
│ ├─ cookie.vue /example/cookie example-cookie
│ └─ svgicon.vue /example/svgicon example-svgicon
├─ [...all].vue /:all(.*)* all
├─ index.vue / index
└─ login.vue /login login
  • 使用路由参数需通过 [ ] 将参数名包裹,并设为文件名
  • 文件夹不会生成路由,例如 example 文件夹并没有生成 /example 路由
  • 路由 name 会根据文件的目录结构自动生成,并用 - 连接,可确保 name 的唯一性
  • 所有 components 目录均不会生成路由

点题

这么好用的特性,我也是第一时间集成进了我开发的 Fantastic-admin 后台框架中,如果你感兴趣,可以点我详细了解如何使用。

神奇!这款 Vue 后台框架居然不用手动配置路由的更多相关文章

  1. Angular实战之使用NG-ZORRO创建一个企业级中后台框架(进阶篇)

    前言: 上一篇文章我们讲了如何在创建的Angular项目中快速引入ng-zorro-antd企业中台组件库,并且快速构建后台管理页面框架模板.这一章主要介绍的是如何在创建好的后台管理页面框架的快速生成 ...

  2. 爆款预订,2022 年最值得关注的后台框架 —— Fantastic-admin

    前言 如果 2021 年你还没有听说过 Fantastic-admin ,那即将到来的 2022 年可不要再错过了. Fantastic-admin 做为一款开箱即用的 Vue 中后台管理系统框架,距 ...

  3. 一步步带你做vue后台管理框架(一)——介绍框架

    系列教程<一步步带你做vue后台管理框架>第一课 github地址:vue-framework-wz 线上体验地址:立即体验 在如今的科技公司中有很多前端的需求都是要写一个类似于后台管理框 ...

  4. 关于vue 框架与后台框架的混合使用的尝试

    这几天我在研究前台框架和后台框架融合的问题,进行了一些尝试; 我前台选择的是 vue,当然也可以选择 react 等其他 mvvm 框架,不过 vue 对于我来说是最熟悉的; 后台话,我选择的是 ph ...

  5. 关于vue 框架与后台框架的混合使用的尝试------转载

    这几天我在研究前台框架和后台框架融合的问题,进行了一些尝试; 我前台选择的是 vue,当然也可以选择 react 等其他 mvvm 框架,不过 vue 对于我来说是最熟悉的; 后台话,我选择的是 ph ...

  6. 手把手教你使用VUE+SpringMVC+Spring+Mybatis+Maven构建属于你自己的电商系统之vue后台前端框架搭建——猿实战01

            猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...

  7. vue后台管理框架

    vue后台管理框架 系列教程<一步步带你做vue后台管理框架>第一课 github地址:vue-framework-wz 线上体验地址:立即体验 在如今的科技公司中有很多前端的需求都是要写 ...

  8. 基于vite2+electron12后台管理模板|Electron后台框架系统

    前一溜时间有给大家分享一个 electron+vite跨端短视频 项目.这次分享的是vite2.x和electron实现跨平台后台框架,支持国际化多语言配置.导航菜单+树形菜单两种路由菜单模式.展开/ ...

  9. 几款主流PHP框架的优缺点评比

    PHP是一种在国内外都比较流行的开源服务器端脚本开发语言.能够适应大中小型项目的开发需求.我们将在这篇文章中向大家介绍几款主流PHP框架及其相关优缺点评比,作为一个参考分享给朋友们. 主要参考的PHP ...

随机推荐

  1. 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承

    <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...

  2. 【记录一个问题】opencv官网的opencv android sdk使用opencl并未用到GPU

    UMat u_mat;mat.copyTo(u_mat);cv::cvtColor(u_mat, cv::BGR2GARY);这样的代码反复执行,并未发现GPU占用提升.执行时间与不使用UMat相当. ...

  3. ros实例_百度语音+图灵

    1 百度语音模块 参考http://blog.csdn.net/u011118482/article/details/55001444 1.1 百度语音识别包 git clonehttps://git ...

  4. [一]Cesium利其器——Visual Studio Code

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ IDE Web前端刚入门的朋友,常常想选择一个快速.好用.流行( ...

  5. Solon 1.6.18 发布,轻量级应用开发框架

    关于官网 千呼万唤始出来: https://solon.noear.org .整了一个月多了...还得不断接着整! 关于 Solon Solon 是一个轻量级应用开发框架.支持 Web.Data.Jo ...

  6. Go 面向对象三大特性

    #### Go 中面向对象的三大特性上周因为有一些事情,停更了; 停更的这段时间,花了点时间做了一个小项目(https://github.com/yioMe/node_wx_alipay_person ...

  7. mysqldump 逻辑备份和物理备份

    逻辑备份 逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现. 工具:mysqldump 特点: 1.可移植性比较强 2.备份和恢复的花费时间长,不适用于大型业务系统 物理 ...

  8. Working hard to know your neighbor's margins:Local descriptor learning loss论文笔记

    Abstract 论文提出了一种新的训练方法,受到了 Lowe's matching criterion for SIFT的启发.这种新的loss,要比负责的正则方法更好.把这个新的loss方法结合L ...

  9. 计算机网络再次整理————UDP例子[六]

    前言 简单的说,UDP 没有 TCP 用的广泛,但是还有很多是基于UDP的程序的,故而简单介绍一下. 正文 秉承节约脑容量的问题,只做简单的介绍和例子,因为自己几乎也没怎么用过UDP. 只是了解和知晓 ...

  10. 聊一聊如何用C#轻松完成一个TCC分布式事务

    背景 银行跨行转账业务是一个典型分布式事务场景,假设 A 需要跨行转账给 B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的 ACID ,只能够通过分布式事务来解决. 在 聊一聊如何 ...