Repository navigation
v1.1.2
修复
-
重启 Harness 之后部件显示「今日暂无用量」,余额也读不出来。
这两个症状是同一个根因:宿主半边没有声明它要用的服务。
插件在
apply()里读取ctx.webServer来注册汇总路由,却没有把这个服务写进inject。Cordis 对未声明的服务读取会直接抛错(cannot get property "webServer" without inject),而这段读取被try/catch吞掉,于是路由静默地从未注册。客户端拿不到任何数据,用量显示空、余额也显示失败。为什么安装时是好的、重启后才坏:
场景 结果 安装/热重载(Web 服务已在运行) 服务已就绪,读取成功,路由注册 —— 看起来正常 冷启动(重启 Harness) apply()先于服务可见时执行,读取被拒,路由从未注册 —— 部件失效修复方式是声明依赖
export const inject = ['webServer'],让 Cordis 等到服务就绪后再启用这一半;同时把原本被吞掉的失败改成显式报错,避免同类问题再次静默发生。 -
新增宿主半边的回归测试(
test/host-smoke.mjs,9 项):用模拟 Cordis 服务规则的假上下文,未声明inject会直接让测试失败,同时覆盖路由的方法限制、回环Host校验、跨站Origin拒绝、正常响应与卸载释放。
验证
除三套测试(11 + 9 + 9)外,另用真实的 Cordis 4.0.4 运行时复现了冷启动时序,三个场景全部符合预期:
- 先加载插件、后提供服务 → 路由在服务出现时注册(修复后的行为)
- 去掉
inject→ 激活被拒,抛出cannot get property "webServer" without inject,路由始终不存在(原 bug 精确复现) - 服务在加载时已就绪 → 路由注册(热重载路径,解释了为何安装时正常)
安装
dsh plugin --profile desktop add "https://github.com/ZeroOT-Liu/dsh-usage-widget/releases/latest/download/dsh-usage-widget.tgz"升级后需要重启 Harness(宿主半边的改动不会被热重载拾取),然后刷新页面(Ctrl+R)。
完整变更:v1.1.1...v1.1.2