mirror of
https://github.com/HappyLifeOk/cc-3-8-x-mcp.git
synced 2026-08-20 21:47:07 +00:00
[mcp] 修复: restart-package 对任意扩展生效(disable/enable 须传注册路径)
Editor.Package.disable/enable 的参数是扩展绝对路径不是 name(typings: enable(path)/disable(path, options)), 传 name 会 disable 静默不生效 + enable 报 "[Package] Unknown and unable to start", 旧实例(含其 http server 等资源)永久泄漏。改为 getPackages 按 name 反查 path 再调用; 传入已是路径则直接用。实测 guide-editor 按名 reload 后 unload→load 完整执行, 8099 监听 socket 换新
This commit is contained in:
@@ -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); })
|
||||
.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(name, true); })
|
||||
.then(function () { return Editor.Package.enable(pkgPath); });
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.error('[restart-package] failed:', err && (err.stack || err.message) || err);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user