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,对写法有硬性约束:

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 升级:

  1. plugins: [ParamsPlugin]plugins: [new ParamsPlugin()](四个内置插件同理);
  2. 若自定义插件:const MyPlugin: RouterPlugin = {...}class MyPlugin extends RouterPlugin { name = 'my'; override install(...) {...} }
  3. 其余 API(导航 / 守卫 / 状态 / 参数 / 事件)不变。

版本兼容性

功能 ≤0.6.0 0.7.0
插件注册 plugins: [XxxPlugin] plugins: [new XxxPlugin()](破坏性)
非蒸汽(Kotlin/Swift)编译 ❌ 数百处报错 ✅ 全链路通过
蒸汽 / Web / 小程序 ✅(不变)
导航 / 守卫 / 状态 / 参数 / 事件 API ✅(不变)

六、相关链接

欢迎反馈与共建:GitHub

相关推荐
开开心心就好1 小时前
C盘空间不够用?一键扫描清理系统垃圾
前端·javascript·安全·支持向量机·语音识别·etcd·模拟退火算法
爱喝水的小周1 小时前
实验八 Vue‑Router 路由插件实践
前端·javascript
ℋᙚᵐⁱᒻᵉ鲸落1 小时前
ETypeError: nameRef.value?.focus is not a functio. 设置el-input自动聚焦时报错
前端·javascript·vue.js·elementui
JavaGuide1 小时前
为什么越来越多人放弃 Claude Code 转而用 Pi?
前端·后端
SEO_juper1 小时前
2026年用Python检查多语言站点hreflang:自动揪出“回链缺失/标错语言“等致命错误(附完整代码)
开发语言·前端·seo·独立站·谷歌优化
+VX:Fegn089510 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·课程设计
Nicander12 小时前
我给 Excalidraw 做了一个本地工作区:DrawSpace
前端·开源
linux_cfan13 小时前
17 · 引擎适配器全景:HLS/DASH/Vimeo/Mux/Cast
前端·javascript·音视频
计算机魔术师14 小时前
烧掉2780亿美元还不够?OpenAI的资本豪赌让人头皮发麻
前端