v0.7.0 为 破坏性 版本(0.6.0 → 0.7.0),核心是打通 App 原生(Kotlin/Swift)非蒸汽编译 :此前核心 + 插件体系大量使用「工厂返回对象字面量」与 TS 风格宽松写法,仅在 Web / 小程序(装成 JS)与蒸汽模式可用;本次按 UTS 原生规范系统重构,消除数百处 Kotlin 编译错误。升级需将插件注册改为实例化。
一、为什么需要这次改造
uni-app x 的 UTS 在非蒸汽模式下编译为 Kotlin / Swift,对写法有硬性约束:
| UTS 规范 | 旧写法(仅 JS/蒸汽可用) | 本次改造 |
|---|---|---|
| 条件必须是布尔值 | if (handled)、if (to.meta) |
if (x != null) 显式布尔 |
| 对象字面量禁止携带方法 | type Manager = {...} + 工厂返回闭包对象 |
全部改为 class |
| 函数类型参数禁止 vararg/修饰符 | (...args: any[]) => any |
(data: any) => any |
禁用 for...in + Object.prototype |
遍历页面 options | UTSJSONObject.keys() |
禁用 undefined |
x === undefined |
统一 null + 显式可空 |
此前 0.1.0 ~ 0.6.0 的示例 APK 均由蒸汽模式产出;非蒸汽模式从未通过编译。
二、破坏性变更:插件改为实例化注册
RouterPlugin 由 type(对象字面量契约)调整为 abstract class:
ts
// 旧(≤0.6.0)
const router = createRouter({ routes, plugins: [ParamsPlugin] })
// 新(0.7.0)
import { createRouter, ParamsPlugin, InterceptorPlugin } from '@meng-xi/unix-router'
const router = createRouter({ routes, plugins: [new ParamsPlugin(), new InterceptorPlugin()] })
内置插件同一套:ParamsPlugin / InterceptorPlugin / AnimationPlugin / EventsPlugin 均以 class XxxPlugin extends RouterPlugin 实现。
三、class 化清单
| 名称 | 旧形态 | 0.7.0 |
|---|---|---|
RouteState |
type + 工厂闭包 | class(含 setCurrentRoute / onReady 等) |
GuardManager |
type + 工厂闭包 | class(含 runBeforeEach 等) |
RouteMatcher |
type + 工厂闭包 | class(path/name 双索引) |
ParamsManager |
type + 工厂闭包 | class(内存/storage 双通道) |
PluginContext |
含方法对象字面量 | class(hook 注册 + 只读成员) |
RouterPlugin |
type | abstract class(插件基类) |
四、其它原生兼容修复
- uni. 导航 options *:App / 小程序使用无动画字段的对象字面量(匹配
NavigateToOptions具名参数),H5 用 UTSJSONObject 携带animationType - 页面层:模板绑定顶层函数改为本地包装函数(非蒸汽下端顶层函数以属性对象暴露)
- ucss :复合 / 后代选择器改为动态 class(
.login-btn.logout .login-text→ 单类 +:class) - 守卫返回类型 :
NavigationGuard放宽为any(内置多类型联合在 Kotlin 型变下不匹配)
五、升级指南
从 ≤ 0.6.0 升级:
plugins: [ParamsPlugin]→plugins: [new ParamsPlugin()](四个内置插件同理);- 若自定义插件:
const MyPlugin: RouterPlugin = {...}→class MyPlugin extends RouterPlugin { name = 'my'; override install(...) {...} }; - 其余 API(导航 / 守卫 / 状态 / 参数 / 事件)不变。
版本兼容性
| 功能 | ≤0.6.0 | 0.7.0 |
|---|---|---|
| 插件注册 | plugins: [XxxPlugin] |
✅ plugins: [new XxxPlugin()](破坏性) |
| 非蒸汽(Kotlin/Swift)编译 | ❌ 数百处报错 | ✅ 全链路通过 |
| 蒸汽 / Web / 小程序 | ✅ | ✅(不变) |
| 导航 / 守卫 / 状态 / 参数 / 事件 API | ✅ | ✅(不变) |
六、相关链接
欢迎反馈与共建:GitHub