diff --git a/vscode/src/figma/importPlugin.ts b/vscode/src/figma/importPlugin.ts index 7f3b618..0d3eccd 100644 --- a/vscode/src/figma/importPlugin.ts +++ b/vscode/src/figma/importPlugin.ts @@ -147,15 +147,25 @@ export async function importPluginIntoFigma(opts: { const entries = asExtensionEntries(settings.localFileExtensions) const result = appendManifestEntry(entries, { manifestPath: manifestAbs, name: pluginName }) - if (result.added) { - // 先关 Figma 再写,否则退出时的内存快照会把这次写入盖掉。 - if (await isFigmaRunning()) { - logger.add({ level: 'info', source: 'figma', message: '写配置前先退出 Figma(退出会覆盖 settings.json)' }) - if (!await quitFigmaAndWait()) { - fail(`Figma 在 ${QUIT_TIMEOUT_MS / 1000} 秒内没有退出,请手动关掉 Figma 后重试。`) - return - } + // Figma 在跑就一律先关掉,两个原因都成立: + // 写清单时——退出时的内存快照会把这次写入盖掉; + // 清单里已经有了——Figma 把插件代码缓存在进程里,不重启就还跑上一版 + // code.js,改完原型点这个按钮会看到旧界面。 + if (await isFigmaRunning()) { + logger.add({ + level: 'info', + source: 'figma', + message: result.added + ? '写配置前先退出 Figma(退出会覆盖 settings.json)' + : '插件已在清单中,重启 Figma 让它重新读盘上最新的插件代码', + }) + if (!await quitFigmaAndWait()) { + fail(`Figma 在 ${QUIT_TIMEOUT_MS / 1000} 秒内没有退出,请手动关掉 Figma 后重试。`) + return } + } + + if (result.added) { try { const backup = `${settingsPath}.bak-${Date.now()}` await fsp.copyFile(settingsPath, backup) @@ -191,6 +201,6 @@ export async function importPluginIntoFigma(opts: { void window.showInformationMessage( result.added ? `原型插件「${result.name}」已导入 Figma,在 Plugins > Development 里跑它` - : `原型插件「${result.name}」此前已导入,在 Plugins > Development 里跑它`, + : `Figma 已重启,原型插件「${result.name}」是最新代码,在 Plugins > Development 里跑它`, ) }