如何在unplugin-vue-router的extendsRoutes中实现角色判断重定向?
从vite-plugin-pages迁移到unplugin-vue-router,保留根路径重定向逻辑
1. 替换依赖
先卸载原来的vite-plugin-pages和vite-plugin-vue-layouts(如果之前用了布局插件),再安装unplugin-vue-router和配套的布局插件:
npm uninstall vite-plugin-pages vite-plugin-vue-layouts npm install unplugin-vue-router unplugin-vue-layouts
2. 配置Vite插件
修改vite.config.js(或.ts),把原来的pages插件替换成unplugin-vue-router和layouts插件,注意插件顺序:
import { defineConfig } from 'vite' import Vue from '@vitejs/plugin-vue' import VueRouter from 'unplugin-vue-router/vite' import VueLayouts from 'unplugin-vue-layouts/vite' export default defineConfig({ plugins: [ // VueRouter必须放在Vue插件前面 VueRouter({ routesDir: 'src/pages', // 路由文件目录,默认就是这个,可根据你的项目调整 dts: 'src/typed-router.d.ts', // 可选,生成路由类型文件,方便TS提示 }), VueLayouts({ layoutsDir: 'src/layouts', // 布局文件目录,默认值,按需调整 }), Vue(), ], })
3. 重构路由初始化代码
unplugin-vue-router会自动生成路由数组,你只需要导入并结合布局插件,同时保留原来的重定向逻辑:
import { createRouter, createWebHistory } from 'vue-router' // 导入自动生成的路由和布局处理方法 import { routes } from 'vue-router/auto' import { setupLayouts } from 'virtual:generated-layouts' // 保留你原来的登录状态判断函数 function isUserLoggedIn() { // 这里写你的实际判断逻辑,比如读取localStorage或pinia状态 return !!localStorage.getItem('userToken') } const router = createRouter({ history: createWebHistory(), routes: [ // 根路径重定向逻辑完全照搬原来的写法 { path: '/', redirect: (to) => { const loggedIn = isUserLoggedIn() return loggedIn ? { name: 'dashboards-analytics' } : { name: 'home' } }, }, // 把自动生成的路由应用布局后加入路由数组 ...setupLayouts(routes), ], // 保留原来的滚动行为配置 scrollBehavior() { return { top: 0 } }, }) export default router
4. 路由名称兼容说明
unplugin-vue-router的自动命名规则和vite-plugin-pages一致,比如src/pages/dashboards/analytics.vue会生成dashboards-analytics这个路由名称,所以你原来的{ name: "dashboards-analytics" }和{ name: "home" }可以直接用,不需要改。
5. 可选:开启TypeScript类型支持
如果配置了dts生成路由类型文件,记得在tsconfig.json里把它加入include列表:
{ "include": [ "src/**/*", "src/typed-router.d.ts" ] }
这样就完成了迁移,原来的重定向逻辑完全保留,unplugin-vue-router的自动路由和布局功能也能正常运行。
内容的提问来源于stack exchange,提问作者amir tbi
相关产品推荐
相关产品推荐

