Vue-Router v5内置文件式路由,告别手写维护的恐惧

大家好,我是农村程序员,独立开发者,前端之虎陈随易,技术群与交朋友请在个人网站 👇 联系我 ✌️

我的所有文章均为古法手写,无 AI 添加剂,请放心食用,如果你觉得本文有用,一键三连 (点赞评论转发),就是对我最大的支持~


先说个题外话,现在的 AI 真是方便,比如这篇文章,我好几次忍不住想用 AI 来直接搞定,但最终还是忍住了。

正如文章开头的承诺,古法手写,无AI添加剂,还是尽可能地去创造有温度,有人味的东西,尽管可能并不如 AI 那么详细,完美。

但手写的过程,也是自己理解的过程。在其位,谋其职,作为一个程序员,用心去触摸技术的更新和发展,本就是一个令人陶醉的事情。

本文分享Vue Router v5版本将要带来的一些变化。

作为 Vue 生态的三剑客VueVue-RouterPinia之一,Vue-Router一直在 Vue 项目中提供了良好的体验和作用,尽管 Vue3 带来的Hook在一定程度上可以替代 Pinia,甚至有人沾沾自喜:我不用Pinia也能实现同样的功能

在我看来,这无异于在 Git 可视化操作如此繁荣方便的今天,只会git addgit commitgit push 三板斧的选手们陶醉于我可以在炫酷的终端使用 git 命令行的沾沾自喜之中。

不好意思,跑题了,也说明了这确实不是 AI 写的文章,仅仅只是对这个现象吐个槽。

Vue-Route v5的最大变化,应该就是内置了unplugin-vue-router,让文件式路由开箱即用。

js 复制代码
export const constantRoutes = [
    {
        path: '/redirect',
        component: Layout,
        hidden: true,
        children: [
            {
                path: '/redirect/:path(.*)',
                component: () => import('@/views/redirect/index')
            }
        ]
    },

    {
        path: '/',
        component: Layout,
        redirect: '/dashboard',
        children: [
            {
                path: 'dashboard',
                component: () => import('@/views/dashboard/index'),
                name: 'Dashboard',
                meta: { title: 'Dashboard', icon: 'dashboard', affix: true }
            }
        ]
    }
];

那么什么是文件式路由呢?简单点说就是,我们可以告别手动写路由配置的时代了,还记得被手写路由支配的恐惧吗?

bash 复制代码
src/pages/
├── index.vue
├── about.vue
└── users/
    ├── index.vue
    └── [id].vue
└── users.vue

那么文件式路由是什么呢?也就是我们只需要创建页面。

js 复制代码
const routes = [
    {
        path: '/users',
        component: () => import('src/pages/users.vue'),
        children: [{ path: '', component: () => import('src/pages/users/index.vue') }]
    }
];

就能自动生成根据文件目录结构相匹配的路由了。

当然,就算是手写路由时代,也可以直接安装unplugin-vue-router这个依赖来实现文件式路由的功能,但这跟集成到Vue-Router自身的区别还是很大的,这就像在现在 AI 大行其道的当下,还有多少人依旧没有用 AI 写过代码呢。

而在官方下场助推下,相信文件式路由的理念应该会被越来越多的人所了解和使用,想到此处,我依稀还能记起几年以前维护一个 300 多个路由文件的头大。

bash 复制代码
pnpm remove unplugin-vue-router # 删除 unplugin-vue-router
pnpm update vue-router@5 # 安装 update vue-router@5

如果想尝鲜的朋友,按照如上方式安装 Vue-Router 的第 5 个版本。

JS 复制代码
// 之前
import VueRouter from 'unplugin-vue-router/vite'

// 现在
import VueRouter from 'vue-router/vite'

修改导入方式。

JS 复制代码
// 之前
import { defineBasicLoader } from 'unplugin-vue-router/data-loaders/basic'
import { defineColadaLoader } from 'unplugin-vue-router/data-loaders/pinia-colada'
import { DataLoaderPlugin } from 'unplugin-vue-router/data-loaders'

// 现在
import { defineBasicLoader, DataLoaderPlugin } from 'vue-router/experimental'
import { defineColadaLoader } from 'vue-router/experimental/pinia-colada'

调整对应函数的导出路径。

js 复制代码
// 之前
import { VueRouterAutoImports, EditableTreeNode, createTreeNodeValue, createRoutesContext, getFileBasedRouteName, getPascalCaseRouteName } from 'unplugin-vue-router';

// 现在
import { VueRouterAutoImports, EditableTreeNode, createTreeNodeValue, createRoutesContext, getFileBasedRouteName, getPascalCaseRouteName } from 'vue-router/unplugin';

调整相关方法的导出路径。

JS 复制代码
// 之前
import type { Options, EditableTreeNode } from 'unplugin-vue-router'

// 现在
import type { Options, EditableTreeNode } from 'vue-router/unplugin'

调整类型的导出。

js 复制代码
// 之前 (tsconfig.json)
{
  "compilerOptions": {
    "rootDir": "."
  },
  "vueCompilerOptions": {
    "plugins": [
      "unplugin-vue-router/volar/sfc-typed-router",
      "unplugin-vue-router/volar/sfc-route-blocks"
    ]
  }
}

// 现在
{
  "compilerOptions": {
    "rootDir": "."
  },
  "vueCompilerOptions": {
    "plugins": [
      "vue-router/volar/sfc-typed-router",
      "vue-router/volar/sfc-route-blocks"
    ]
  }
}

Volar 插件的配置调整。

js 复制代码
// 之前
{
  "include": ["./typed-router.d.ts", "unplugin-vue-router/client"]
}

// 现在
{
  "include": ["./typed-router.d.ts"]
}

tsconfig.json 配置文件的调整。

解放双手,释放大脑,让文件式路由走进千家万户。

相关推荐
Byron07072 小时前
从 0 到 1 搭建 Vue 前端工程化体系:提效、提质、降本实战落地
前端·javascript·vue.js
哆啦code梦2 小时前
前端存储三剑客:localStorage、sessionStorage与Cookie解析
前端·前端存储
徐小夕@趣谈前端2 小时前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
Data_Journal2 小时前
如何使用 Python 解析 JSON 数据
大数据·开发语言·前端·数据库·人工智能·php
德育处主任Pro2 小时前
纯前端网格路径规划:PathFinding.js的使用方法
开发语言·前端·javascript
墨笔.丹青2 小时前
基于QtQuick开发界面设计出简易的HarmonyUI界面----下
开发语言·前端·javascript
董世昌413 小时前
深度解析浅拷贝与深拷贝:底层逻辑、实现方式及实战避坑
前端·javascript·vue.js
扶苏10023 小时前
vue使用event.dataTransfer实现A容器数据拖拽复制到到B容器
前端·vue.js·chrome
David凉宸3 小时前
Vue 3 项目的性能优化策略:从原理到实践
前端·vue.js·性能优化
小马_xiaoen3 小时前
Proxy 与 Reflect 从入门到实战:ES6 元编程核心特性详解
前端·javascript·ecmascript·es6