Minke/tests/fixtures/web-plugin

250Stars28Forks3Issues2Watchers

面向 DSH Web 宿主平台的极简外部插件,挂入渲染端模块加载器并标记文档根节点,用于校验插件安装与热更新链路。

Language
TypeScript
License
Apache-2.0
Branch
main
agentdeekseekdesktopdshdsh-pluginharness

Install

$ dsh plugin --profile web add github:lencx/Minke/tests/fixtures/web-plugin

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

一句话定位

这是 Minke 桌面工程附带的一个 Web 平台烟雾测试夹具,作为最简形式的外部 Web 插件挂入宿主渲染端模块加载器,用于验证 dsh plugin 安装与热更新链路是否通畅。

核心能力

  • 在宿主页面 HTML 根元素上写入 data-dsh-external-web-plugin="active",作为"外部 Web 插件已加载"的探针标记
  • 通过宿主提供的 window.__ModuleLoader__ 把自身注册为一个可被宿主启动的客户端模块
  • 在包元数据中声明 cordis 补丁,把自己插入到宿主启动清单中,名称为 @dsh-desktop/smoke-web-plugin
  • 不在桌面主进程做任何事,主进程侧的 apply() 是空函数

技术实现

  • 语言: JavaScript(ESM,type: module
  • 关键依赖: 仅依赖宿主运行时提供的 window.__ModuleLoader__,无第三方包依赖
  • 架构模式: Web 平台客户端插件——通过 cordis.patch.yml 在宿主启动清单中插入自己,再由宿主在渲染端加载 lib/client.js 注册的工厂
  • 入口文件: lib/index.js(主进程侧,空实现)/ lib/client.js(渲染端侧,真正生效)

适用场景

适合 Minke 维护者或 DSH 桌面宿主开发者,用来验证"外部 Web 插件安装 + 渲染端加载 + 热更新"这条链路在改版后仍然工作;不适合普通终端用户安装使用。

前置依赖与兼容性

依赖最低版本说明
DSH未声明插件包未声明 DSH 版本;仅在 Minke 自带的 harness:smoke 流程下被消费
Node未声明插件包未声明 Node 版本
平台跨平台在宿主 Web 平台(Electron 渲染端或浏览器)运行
原生模块源码中未引入任何原生模块

安装方式

dsh plugin --profile web add github:lencx/Minke/tests/fixtures/web-plugin

配置项

本插件无需额外配置。包内 dsh.client 仅声明三个清单字段,没有暴露可由用户调整的运行参数:

清单字段类型说明默认值
dsh.client.platform字符串声明运行平台,必须是 web 才能被宿主渲染端加载"web"
dsh.client.inject数组客户端脚本要注入的位置标签,当前为空[]
dsh.client.immediately布尔是否在宿主启动时立即注册该客户端模块true

常见问题

Q: 这个插件装上以后我能在 DSH 桌面上看到什么功能?

A: 看不到任何新功能。它的唯一副作用是在宿主页面根元素上写一个 data-dsh-external-web-plugin="active" 数据属性,普通用户感知不到界面变化。

Q: 它适合普通用户安装吗?

A: 不适合。它是 Minke 仓库内的烟雾测试夹具,被 scripts/harness/smoke.mjs 用来自动校验外部 Web 插件的安装和热更新链路,没有业务价值。

Q: 安装后能否卸载?

A: 可以,按通用的 dsh plugin remove 流程卸载即可;卸载后宿主页面根元素上的 data-dsh-external-web-plugin="active" 标记会随之消失。

Q: 它的主进程和渲染端分别是干什么的?

A: 主进程侧的 lib/index.js 导出一个空 apply(),不做任何事情;真正的动作发生在渲染端,lib/client.js 调用 window.__ModuleLoader__.load 注册一个工厂,工厂的 apply() 写入文档根元素的数据属性。

Q: 如何验证这个插件是否被宿主正确加载?

A: 在浏览器开发者工具里查看页面根 <html> 元素,如果 data-dsh-external-web-plugin 的值是 "active",说明已被加载。Minke 的烟雾测试还会修改客户端源码把 "active" 改成 "reloaded" 来验证热更新。

上手难度

入门 — 整个插件只有两个空壳 JS 文件加一份 cordis 补丁,理解门槛来自 DSH Web 插件清单的字段约定,而不是插件自身逻辑。

已知问题与限制

  • 仅作为 Minke 工程内烟雾测试夹具存在,未声明对外使用的版本兼容信息,第三方环境无法保证可用
  • 主进程 apply() 始终是空函数,无法在 Node/桌面主进程侧扩展业务逻辑