约定式路由生成神器:vite-plugin-pages

简介: 这篇文章介绍了如何使用vite-plugin-pages插件在Vite项目中实现约定式路由自动生成,包括搭建工程、安装插件、配置vite.config.ts文件以及创建和挂载路由。

前言

去年我发布了一篇关于 约定式路由 的文章:在 vite 中使用 glob 实现约定式路由

文章主要写了关于在 Vite 中使用 glob 根据文件系统自动生成路由,但看到有伙伴介绍这个目前有现成的 vite 插件:vite-plugin-pages

我一时就来了兴趣,搭建了个 vite 工程了解了下,真的可以,而且配置很简单,下面我来介绍一下这个插件的使用

安装插件

1、 使用命令搭建一个 vue3 工程:

pnpm create vite vue3-demo -- --template vue-ts

2、 安装 vue-routervite-plugin-pages

pnpm add vue-router

pnpm add vite-plugin-pages -D

配置插件

1、 打开 vite.config.ts 文件,新增配置:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import pages from 'vite-plugin-pages'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    pages({
      dirs: "src/views", // 需要生成路由的文件目录,默认就是识别src下面的pages文件
      exclude: ["**/components/*.vue"], // 排除在外的目录,上面配置目录的例子,里面有 components 目录,我们不希望他被解析为路由
      extendRoute(route, parent) {
        if (route.path === '/') {
          //给默认路由加一个redirect,默认为index.vue
          return {
            ...route,
            redirect: '/about'
          }
        }
      }
    }),
  ]
})

2、 配置 router/index.ts 路由文件:

import {
  createRouter,
  createWebHistory
} from "vue-router";
import routes from "~pages";
const router = createRouter({
  history: createWebHistory(),
  routes,
});
export default router;

3、 main.ts 中挂载路由:

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from './router'

createApp(App).use(router).mount('#app')

文件系统即是路由

1、 我们简单创建几个菜单文件:

image.png

2、 我们在 router/index.ts 打印一下 routes ,会得到默认的路由配置,这时候我们就可以访问路由了:
image.png

3、 如果我们想覆盖 route 配置,可以在文件中添加 路由信息:

<route>
{
  name:'new-about',
  meta: {
    requiresAuth: false,
    layout:'top'
  }
}
</route>

里面的配置会直接覆盖默认配置,你也可以使用 yaml 格式:

<route lang="yaml">
name: new-about
meta:
  requiresAuth: true
  layout: top
</route>

4、 配置动态路由,只需要用 [] 符号包裹:

src/pages/users/[id].vue -> /users/:id (/users/one)
src/pages/[user]/settings.vue -> /:user/settings (/one/settings)

5、 配置 404 拦截页面,在 src/views 目录下添加 [...all].vue
image.png

路由生成规则

src/views/index.vue -> /
src/views/index/a.vue -> /a // 这里的a.vue就是index.vue的子路由(children)
src/views/father/index.vue -> /father
src/views/father.vue -> /father
src/views/father/son.vue -> /father/son
src/views/father/[id].vue -> /father/:id
src/views/[father]/son.vue -> /:father/son
src/views/[…all].vue ->文件用来适配404页面

更多配置请参考:vite-plugin-pages

总结

个人感觉这个插件功能还是挺实用的,可以用在我们的项目上,就不用每次都要手写路由配置了,也更加容易维护。

不得不感叹现在前端开发的工具真的是越来越多了,也越来越实用,vite 还有很多实用的功能待我们去探索,这里给作者和 尤雨溪 老板一个赞👍🏻🫰

相关文章
|
前端开发 JavaScript 安全
|
9月前
|
资源调度
Vue3 + Vite 构建组件库发布到 npm
这篇文章介绍了如何使用Vue3和Vite构建组件库并发布到npm,包括初始化项目、配置项目结构、创建组件目录、设置入口文件以及导出组件等步骤。
1258 0
Vue3 + Vite 构建组件库发布到 npm
|
9月前
|
消息中间件 JavaScript 前端开发
现在浏览器的渲染原理及流程
这篇文章介绍了浏览器渲染原理及流程,包括HTML解析、样式计算、布局、分层、绘制、分块、光栅化和画等阶段,以及各个阶段的输入输出和任务执行过程。文章还解释了浏览器如何处理外部CSS和JS文件的下载和解析,以及这些文件如何影响渲染流程。
428 0
|
安全 Java API
JAVA三种权限认证框架的搭建方法
SaToken、JustAuth和MaxKey是三个用于身份认证和权限管理的工具。SaToken是轻量级框架,简化登录、权限、OAuth2.0等认证,适合中小型项目;JustAuth是第三方授权登录库,支持多种社交平台,易于集成;MaxKey是企业级IAM产品,提供复杂的权限管理和统一认证,支持多种标准协议及社交账号集成。
1642 1
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
2390 0
vue3 【提效】全局布局 vite-plugin-vue-layouts 实用教程
vue3 【提效】全局布局 vite-plugin-vue-layouts 实用教程
1736 0
|
前端开发 JavaScript
怎么在vite项目中全局导入一个scss文件
在Vite项目中全局导入SCSS文件的方法:通过配置`vite.config.js`中的`css.preprocessorOptions.scss.additionalData`属性,可以将SCSS变量或混合内容全局引入。此方法同样适用于LESS文件。详情参见Vite官方文档。
1048 1
怎么在vite项目中全局导入一个scss文件
Threejs播放模型自带动画
这篇文章介绍了在Three.js中如何播放带有预设动作的模型动画,并特别提到了如何设置动画循环模式以实现一次性播放效果。
737 3
Threejs播放模型自带动画
|
Python
axios的get请求传入数组参数
【10月更文挑战第11天】 当使用 `axios` 发送包含数组参数的 GET 请求时,默认的序列化方式可能与后端(如 Django)不兼容,导致无法正确获取数组参数。解决方案是通过 `paramsSerializer` 指定自定义序列化函数,或使用 `qs` 库来格式化数组参数,确保前后端一致。示例代码展示了如何使用 `qs` 库设置 `arrayFormat` 为 `&quot;repeat&quot;`,以符合 Django 的解析要求。
742 2
|
前端开发 JavaScript
async和await的错误处理
在TypeScript中,`async`和`await`是处理异步操作的语法糖,能够让异步代码看起来像同步代码。`async`函数返回的总是`Promise`对象。当`await`后跟的表达式为`reject`状态的`Promise`时,会抛出错误,需要通过`try/catch`、链式`.catch()`或外部`Promise`包装来处理错误,防止代码崩溃。
720 0
async和await的错误处理