跳到主内容

dsh-harmony 使用指南

让一个 DSH 插件在运行时改写其它已安装插件的编译产物,而不必维护 fork。

本文为派生内容(基于 wiki / faq / compatibility_json 自动组装),非 AI 即时创作。

本文由本站基于该插件已收录的字段自动派生(wiki / faq / compatibility_json / readme),非 AI 即时创作。每节末尾标源字段。

快速上手

dsh-harmony

— 源: plugin_wiki.wiki_content

安装与验证

dsh plugin --profile web add dsh-harmony

复制以上命令在 DSH Web Profile 内运行。安装完成后在「插件列表」启用即可。

— 源: plugins.install

常见问题

dsh-harmony 是给普通用户用的还是给开发者用的?

两者都是。它给 WebUI 的"设置 → Harmony"页面、终端 TUI 和 CLI 命令,普通用户可以用它们查看、排序、启用或停用已注册的 Patch。给开发者,它提供 Source、Semantic、Loader 和 Composite 四类 Patch API,用来编写或审阅实际改写目标插件的代码。

安装后必须重启 DSH 才会生效吗?

是的。dsh-harmony 作为 DSH 插件安装时,宿主进程内的 Hook 不会自动启用,需要全局安装 dsh-harmony 让 DSH 通过它启动,或在 WebUI 中选择"安装并重启"。README 与 installer.ts 明确要求这一步,且不能在自身运行时内热重载 dsh-harmony 本身(plugin.ts:360/582/786)。

Patch 改写后的代码保存在哪里?

只存在于内存中,node_modules 里的安装文件不会被修改。Source Patch 通过 TSQuery 定位目标再用 MagicString 重写源码区间,Loader Patch 在模块加载前替换文件内容,运行时结束后原始文件仍逐字节保持不变(README.md:50-66、src/runtime.ts:34-45)。

一个 Patch 失败了会影响其他 Patch 或宿主启动吗?

不会。独立 Patch 失败时会被报告并跳过,后续 Patch 与 Host 仍照常运行(src/runtime.ts:319-326)。Composite(组合)Patch 内的任一成员失败时整体不应用,其它 Patch 不受影响(src/runtime.ts:497、315-360 测试)。

它是稳定 API 还是依赖内部细节?

依赖内部细节。Harmony 把已编译目标的内部组件、Loader 条目和编译后行为当作可改写对象,作者公开承认这不是稳定的公开 API,而是显式声明的、可排序、可检查、可回退的依赖(README.md:62、52-66)。

如何把某个 Patch 调整顺序或关闭它?

通过 WebUI(设置 → Harmony)、终端 TUI 或 dsh harmony patch-order move/enable/disable ... 命令调整。CLI 的 status、patch-order show、provider-order show 在健康或顺序约束失败时退出码为 1,便于脚本接入(src/bin.ts:60-67、209、379、449)。

卸载它会同时删除我安装的其它 DSH 插件吗?

不会。dsh harmony disable my-provider/... 只停用 Patch;卸载 dsh-harmony 本身通过 dsh plugin remove dsh-harmony 完成,其它插件与 Patch 设置都保留(src/bin.ts:90-92、src/plugin.ts:541-566)。

它对 React 组件做了什么特殊处理?

通过子包 dsh-harmony-react 提供 element() 与 component() 工厂,专门改写编译后的 jsx/jsxs 调用点与共享组件定义;其它 Source Patch 一样使用同一份全局顺序。声明为函数声明的组件会被改写为已初始化的 const,新绑定不再提升(packages/react/README、src/builtins/settings.patch.cts:13-84)。

— 源: plugin_wiki.faq_json

兼容性

  • DSH: 0.1.0-rc.8 || 0.1.1-rc.1
  • Node: ^22.22.3 || >=24.11.1
  • Platforms: macOS, Windows, Linux

— 源: plugin_wiki.compatibility_json

踩坑提醒

安装前请审阅上游仓库;本指南基于已收录字段自动派生,可能滞后于最新版本。如发现与官方文档冲突,请以上游为准。

— 来源:通用规则