检测第一次加载VS Code扩展版本



我想在用户第一次加载新版本时采取行动我的VS Code扩展。这与仅仅检测第一次运行不同,如如何在安装后立即运行vscode扩展命令所述?因为我不想在安装后马上检测到。我想检测每个新版本的首次运行,这是一个完全不同的问题。

Mike Lischke对那个问题的回答实际上并没有回答那个问题,它回答了这个问题,但这并不意味着这是一个重复的问题,这意味着对另一个问题的回答实际上并没有回答被问到的问题,因为不像许多人,我实际上读了这个问题,我没有费心去读答案,因为那个问题的答案不是我想要的。坦率地说,我很想删除这个问题,只是为了报复Stack Overflow,因为我受够了这些废话。做你喜欢做的事。

搜索网络出现示例代码

export function activate(context: vscode.ExtensionContext) {
if (context.firstTimeUse) {
//do the one-time-per-version-update thing
}
}

但是ExtensionContext似乎没有这个属性,至少不再有了。

那你现在怎么做呢?

我可以在文件中记录版本,并在更新之前与文件进行比较,但如果有烘培支持,我宁愿以支持的方式进行。

没有支持的机制

由于每次更新都会获得一个新文件夹,因此不需要记录时间戳,只需探测文件即可。如果存在,不要第一次运行。如果它不存在,首先运行,创建文件,并做其他第一次运行的事情。

这是如此简单和直接,可能永远不会有一个支持的机制。感谢Lex Li在评论中确认这是标准解决方案。

如果需要区分主要版本、次要版本和维护版本,最简单的解决方案是将版本字符串存储在context.globalState中。首先尝试从context.globalState获取。缺席意味着第一次跑步。如果它存在,则与当前版本完全匹配意味着没有更改。对于不匹配的,可以解析出主要和次要版本号context.globalState

const currentVersion = context.extension.packageJSON.version as string;
const lastVersion = context.globalState.get("version") as string ?? "0.0.0"
if (lastVersion !== currentVersion) {
logger.warn(`Updated to ${currentVersion}`);
const lastVersionPart = lastVersion.split(".");
const currVersionPart = currentVersion.split(".");
if (lastVersionPart[0] !== currVersionPart[0]) {
// major version change
advertiseWalkthrough();
if (lastVersionPart[1] !== currVersionPart[1]) {
// minor version change
launchWhatsNew();
} else {
// it's a maintenance version change so don't pester the user
}
}
context.globalState.update("version", currentVersion);
}

最新更新