更新记录

1.0.0(2026-06-07) 下载此版本

新增

  • 路由器核心 - createRouter() 创建路由器实例,支持 routesstrictinterceptUniApi 配置项
  • 路由导航 - router.push() 导航到新页面,router.replace() 替换当前页面,router.back() 返回上一页
  • 命名路由 - 通过 name 字段进行导航,无需硬编码路径字符串
  • 路由元信息 - meta 字段支持 titleisTabrequireAuth 及自定义扩展字段
  • 全局前置守卫 - router.beforeEach() 在每次导航前执行,支持中止、放行和重定向
  • 全局解析守卫 - router.beforeResolve() 在所有前置守卫和路由独享守卫完成后执行
  • 全局后置钩子 - router.afterEach() 在导航完成后执行
  • 路由独享守卫 - beforeEnter 配置项,进入特定路由时触发
  • 守卫重定向 - 守卫中调用 next(location) 可重定向到其他路由,支持多级重定向(最大深度 10)
  • 组合式 API - useRouter() 获取路由器实例,useRoute() 获取当前路由位置
  • 错误处理 - RouterError 路由错误类,NavigationFailure 导航失败类(包含 tofromcause 信息)
  • 全局错误捕获 - router.onError() 注册错误处理回调
  • 路由查询 - router.resolve() 解析路由位置(不执行导航),router.getRoutes() 获取所有路由配置,router.hasRoute() 检查路由是否存在
  • TypeScript 类型提示 - RouteNameMap 接口支持模块增强,为路由名称和路径提供自动补全和类型检查
  • uni API 拦截 - interceptUniApi 选项可拦截 uni.navigateTo / uni.redirectTo / uni.switchTab / uni.navigateBack,统一走路由守卫流程
  • 重复导航检测 - push 到当前页面时自动拒绝并抛出 NAVIGATION_DUPLICATED 错误
  • 并发导航排队 - 多次并发导航自动排队,前一次完成后再执行下一次
  • 路径自动规范化 - 路径自动补全前导 /,查询字符串自动解析为 query 对象

错误码

错误码 说明
NAVIGATION_ABORTED 导航被守卫中止
NAVIGATION_CANCELLED 导航被取消(守卫异常或重定向超限)
NAVIGATION_DUPLICATED 重复导航到当前位置
ROUTE_NOT_FOUND 未找到匹配的路由
NAVIGATION_API_ERROR uni 导航 API 调用失败
SETUP_ERROR 路由器初始化或使用方式错误

平台兼容性

uni-app(3.7.9)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟

uni-app x(3.7.9)

Chrome Safari Android iOS 鸿蒙 微信小程序

其他

多语言 暗黑模式 宽屏模式

@meng-xi/uni-router

license npm npm

为 uni-app 提供类似 vue-router 风格的路由管理系统(uni_modules 版本)。


特性

  • vue-router 风格 API - 熟悉的 push / replace / back 导航方式,零学习成本
  • 路由守卫 - 全局前置守卫 beforeEach、解析守卫 beforeResolve、后置钩子 afterEach、路由独享守卫 beforeEnter
  • 命名路由 - 通过 name 进行导航,无需硬编码路径字符串
  • 路由元信息 - meta 字段支持页面标题、权限标记、TabBar 标识等自定义数据
  • TypeScript 类型提示 - 通过模块增强为路由名称和路径提供自动补全和类型检查
  • 错误处理 - 完整的 RouterError / NavigationFailure 体系,支持 onError 全局捕获
  • 组合式 API - useRouter() / useRoute() 在组件中便捷访问路由器
  • uni_modules 集成 - 通过 uni_modules 方式安装,无需 npm,开箱即用

📖 完整文档:https://mengxi-studio.github.io/uni-router/

安装

uni_modules(推荐)

mxuni-router 目录复制到项目的 uni_modules 目录下:

src/
  └── uni_modules/
        └── mxuni-router/
              ├── js_sdk/
              │     ├── index.js
              │     ├── index.cjs
              │     ├── index.d.ts
              │     └── index.d.cts
              ├── components/
              │     └── mxuni-router/
              │           └── mxuni-router.vue
              ├── package.json
              └── readme.md

npm

pnpm add @meng-xi/uni-router

npm 方式需将导入路径改为 @meng-xi/uni-router

快速开始

1. 创建路由器

// main.ts
import { createSSRApp } from 'vue'
import { createRouter } from './uni_modules/mxuni-router/js_sdk/index.js'
import App from './App.vue'

const router = createRouter({
    routes: [
        { path: 'pages/index/index', name: 'home', meta: { title: '首页' } },
        { path: 'pages/about/about', name: 'about', meta: { title: '关于', requireAuth: true } },
        { path: 'pages/user/user', name: 'user', meta: { title: '我的', isTab: true } }
    ],
    strict: true
})

export function createApp() {
    const app = createSSRApp(App)
    app.use(router)
    return { app }
}

2. 路由导航

import { useRouter, useRoute } from './uni_modules/mxuni-router/js_sdk/index.js'

// 在组件 setup 中使用
const router = useRouter()
const route = useRoute()

// 路径导航
await router.push('/pages/about/about')
await router.push({ path: '/pages/about/about', query: { id: '1' } })

// 命名导航
await router.push({ name: 'about' })

// 返回
await router.back()
await router.back(2) // 返回两级

3. 路由守卫

// 全局前置守卫 - 登录验证
router.beforeEach((to, from, next) => {
    if (to.meta.requireAuth && !isLoggedIn()) {
        next({ name: 'login', query: { redirect: to.fullPath } })
    } else {
        next()
    }
})

// 全局后置钩子
router.afterEach((to, from) => {
    console.log(`导航完成: ${from.path} → ${to.path}`)
})

4. 自动生成路由配置(推荐)

配合 @meng-xi/vite-plugingenerateRouter 插件,可从 pages.json 自动生成路由配置和类型声明:

pnpm add @meng-xi/vite-plugin -D
// vite.config.ts
import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import { generateRouter } from '@meng-xi/vite-plugin'

export default defineConfig({
    plugins: [
        uni(),
        generateRouter({
            pagesJsonPath: 'src/pages.json',
            outputPath: 'src/router.config.ts',
            dts: true,
            metaMapping: {
                navigationBarTitleText: 'title',
                requireAuth: 'requireAuth'
            }
        })
    ]
})

然后在 main.ts 中导入生成的路由配置:

import { createRouter } from './uni_modules/mxuni-router/js_sdk/index.js'
import routes from './router.config'

const router = createRouter({ routes })

API 概览

核心

API 说明
createRouter(options) 创建路由器实例
useRouter() 获取路由器实例(组合式 API)
useRoute() 获取当前路由位置(组合式 API)

Router 实例方法

方法 说明
router.push(location) 导航到新页面
router.replace(location) 替换当前页面
router.back(delta?) 返回上一页或多级页面
router.beforeEach(guard) 注册全局前置守卫
router.beforeResolve(guard) 注册全局解析守卫
router.afterEach(guard) 注册全局后置钩子
router.onError(handler) 注册错误处理回调
router.resolve(location) 解析路由位置(不导航)
router.getRoutes() 获取所有路由配置
router.hasRoute(name) 检查路由是否存在

错误码

错误码 说明
NAVIGATION_ABORTED 导航被守卫中止
NAVIGATION_CANCELLED 导航被取消(守卫异常或重定向超限)
NAVIGATION_DUPLICATED 重复导航到当前位置
ROUTE_NOT_FOUND 未找到匹配的路由
NAVIGATION_API_ERROR uni 导航 API 调用失败
SETUP_ERROR 路由器初始化或使用方式错误

TypeScript 类型提示

启用 dts: true 后,generateRouter 插件自动生成类型声明文件,为路由导航提供类型安全:

// 路由名称自动补全
router.push({ name: 'pagesIndexIndex' }) // ✅ 自动补全
router.push({ name: 'invalidName' }) // ❌ 类型错误

// 路径自动补全
router.push({ path: '/pages/index/index' }) // ✅ 自动补全
router.push({ path: '/invalid/path' }) // ❌ 类型错误

与 pages.json 的关系

Uni Router 不替代 pages.json,而是与之配合使用:

职责 pages.json Uni Router
页面注册 必须声明 不负责
路由导航 uni.navigateTo 等 push / replace / back
路由守卫 不支持 beforeEach 等
路由元信息 不支持 meta 字段
命名路由 不支持 name 字段

License

MIT

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。