ARTICLE · 1048306
uni-app x 0.7.0重磅升级:插件实例化,原生编译彻底打通
uni-app x 0.7.0重磅升级:插件实例化,原生编译彻底打通
v0.7.0 为 破坏性 版本(0.6.0 → 0.7.0),核心是打通 App 原生(Kotlin/Swift)非蒸汽编译:此前核心 + 插件体系大量使用「工厂返回对象字面量」与 TS 风格宽松写法,仅在 Web / 小程序(装成 JS)与蒸汽模式可用;本次按 UTS 原生规范系统重构,消除数百处 Kotlin 编译错误。升级需将插件注册改为实例化。
一、为什么需要这次改造
uni-app x 的 UTS 在非蒸汽模式下编译为 Kotlin / Swift,对写法有硬性约束:
if (handled)if (to.meta) | if (x != null) | |
type Manager = {...} | ||
(...args: any[]) => any | (data: any) => any | |
Object.prototype | UTSJSONObject.keys() | |
undefined | x === undefined | null + 显式可空 |
此前 0.1.0 ~ 0.6.0 的示例 APK 均由蒸汽模式产出;非蒸汽模式从未通过编译。
二、破坏性变更:插件改为实例化注册
RouterPlugin 由 type(对象字面量契约)调整为 abstract class:
// 旧(≤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 化清单
RouteState | ||
GuardManager | ||
RouteMatcher | ||
ParamsManager | ||
PluginContext | ||
RouterPlugin |
四、其它原生兼容修复
- 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(导航 / 守卫 / 状态 / 参数 / 事件)不变。
版本兼容性
plugins: [XxxPlugin] | plugins: [new XxxPlugin()](破坏性) | |
六、相关链接
更新日志 插件系统文档 UTS 与 TS 的差异
欢迎反馈与共建:GitHub