用途:介绍如何用 @comfyorg/extension-api 编写 ComfyUI v2 前端扩展,替代 v1 的 app.registerExtension() 与 nodeType.prototype 猴子补丁。核心为 import 式 API,不依赖 window.app;读取用 getter,写入用命令式 setValue;订阅用类型化 on(...) 并返回取消订阅函数;每个 defineX 返回可释放的 DisposableHandle。
主要能力:defineNode 响应节点生命周期(nodeCreated 与 loadedGraphNode 二者只触发其一),提供 id、type、comfyClass、on('executed'|'removed'|'configured'|'beforeSerialize') 等;defineExtension 处理应用级 setup 与 onMounted/onUnmounted 等;defineWidget 注册自定义控件类型并提供 mount(host, ctx) 挂载 DOM,支持 on('valueChange'|'optionChange'|'beforeSerialize'|'beforeQueue');defineSidebarTab、defineBottomPanelTab、defineToolbarButton、defineCommand、defineHotkey、defineSetting、defineAboutBadge 注册外壳 UI,均返回 DisposableHandle。事件命名空间含 execution、graph、server、workbench,可用 TS 模块增强收窄载荷;另提供 toast/notify 提示与节点身份辅助函数。
使用方式:示例以 export default defineNode/defineExtension(...) 导出,并在 setup() 或模块作用域内调用各 defineX。defineNode 的 nodeCreated 必须同步执行,生命周期钩子同步调用,不得置于 await 之后。defineWidget 的挂载仅通过 host 与 ctx.widget/ctx.node 操作,无 widget.element。
限制:NodeHandle 在 Phase A 不支持位置/尺寸/模式与连接事件,节点无法枚举或引用自身控件;事件载荷默认为 unknown;正文未提供安装命令、收费与价格信息,暂未提供。