diff --git a/main.js b/main.js index 701c619..8e005bf 100644 --- a/main.js +++ b/main.js @@ -531,16 +531,31 @@ async function doOpenPrefab(urlOrPath) { * 注意:reload 本插件自身时,本函数处于即将被卸载的 main.js 上下文,必须 fire-and-forget。 * Editor.Package.disable 是 host 进程 API,扩展沙箱卸载后仍然有效; * enable 在 disable 完成后用 setTimeout 触发,给 unload 收尾留窗口。 + * ⚠️ disable/enable 的参数是扩展**绝对路径**不是 name(typings: enable(path) / + * disable(path, options))——传 name 会 disable 静默不生效 + enable 报 + * "[Package] Unknown and unable to start",必须先用 getPackages 反查注册路径。 */ function doRestartSelf(name) { name = name || 'cc-3-8-x-mcp'; log('restart-package: scheduling disable → enable for ' + name); setImmediate(function () { Promise.resolve() - .then(function () { return Editor.Package.disable(name, true); }) - // 200ms 给 unload 钩子(stopRefreshWatcher / stopMcpServer)跑完 - .then(function () { return new Promise(function (r) { setTimeout(r, 200); }); }) - .then(function () { return Editor.Package.enable(name, true); }) + .then(function () { + if (name.indexOf('/') >= 0 || name.indexOf('\\') >= 0) return name; // 已是路径直接用 + var list = (Editor.Package.getPackages() || []).filter(function (p) { + return p && (p.name === name || (p.info && p.info.name === name)); + }); + if (!list.length || !list[0].path) { + throw new Error('找不到扩展 "' + name + '" 的注册路径(getPackages 匹配 ' + list.length + ' 条)'); + } + return list[0].path; + }) + .then(function (pkgPath) { + return Promise.resolve(Editor.Package.disable(pkgPath)) + // 200ms 给 unload 钩子(stopRefreshWatcher / stopMcpServer)跑完 + .then(function () { return new Promise(function (r) { setTimeout(r, 200); }); }) + .then(function () { return Editor.Package.enable(pkgPath); }); + }) .catch(function (err) { console.error('[restart-package] failed:', err && (err.stack || err.message) || err); });