🐛 fix(vscode): 导入原型插件时总是重启 Figma

插件已经在 Figma 清单里时原先只是把 Figma 拉到前台,而 Figma 把插件代码
缓存在进程里,改完原型点按钮看到的还是上一版 code.js。现在不管清单里有没有,
只要 Figma 在跑就先关掉再拉起,让它重新读盘。

Claude-Session: https://claude.ai/code/session_01Kgmb1LvrPmFX3NoUDB4zZC
This commit is contained in:
cruldra committed 2026-09-15 01:03:29 +08:00
1 parent 387b323271
commit 2b02da27e7
1 file changed
+19 -9
+19 -9
View File
@@ -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 里跑它`,
)
}