You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code Azure管理插件升级后自动展示更新日志方案咨询

在VS Code插件升级后自动展示更新日志的实现方案

要实现插件升级后自动向用户展示更新日志,核心是跟踪用户的插件版本变化,在检测到版本升级时触发展示逻辑,以下是具体可行的方案:

核心实现步骤

  1. 版本跟踪:利用VS Code插件的全局状态存储用户上次使用的插件版本,每次插件激活时对比当前版本与存储的版本。
  2. 升级判断:如果当前版本高于存储的版本,判定为升级操作,执行更新日志展示逻辑。
  3. 日志展示:通过弹出提示窗口或打开标签页两种方式呈现更新日志。

具体代码实现

下面是完整的TypeScript示例,包含版本对比、弹窗提示和本地日志打开功能:

import * as vscode from 'vscode';
import * as fs from 'fs';
import * as path from 'path';

export function activate(context: vscode.ExtensionContext) {
    // 获取当前插件版本
    const extension = vscode.extensions.getExtension('你的发布者ID.你的插件ID');
    const currentVersion = extension?.packageJSON.version;
    if (!currentVersion) return;

    // 读取上次使用的版本
    const lastUsedVersion = context.globalState.get<string>('lastUsedVersion');

    // 仅在版本升级时触发日志展示
    if (lastUsedVersion && isVersionHigher(currentVersion, lastUsedVersion)) {
        // 弹出提示窗口,提供查看日志选项
        vscode.window.showInformationMessage('你的Azure服务管理插件已更新,点击查看新增功能', '查看更新日志').then(selection => {
            if (selection === '查看更新日志') {
                // 读取插件包内的CHANGELOG.md文件
                const changelogPath = path.join(context.extensionPath, 'CHANGELOG.md');
                fs.readFile(changelogPath, 'utf8', (err, content) => {
                    if (err) {
                        vscode.window.showErrorMessage('无法加载更新日志,请检查插件文件完整性');
                        return;
                    }
                    // 创建临时Markdown文档并打开
                    vscode.workspace.openTextDocument({ content, language: 'markdown' })
                        .then(doc => vscode.window.showTextDocument(doc));
                });
            }
        });
    }

    // 更新全局状态中的版本记录
    context.globalState.update('lastUsedVersion', currentVersion);
}

// 语义化版本比较函数,判断v1是否高于v2
function isVersionHigher(v1: string, v2: string): boolean {
    const v1Segments = v1.split('.').map(Number);
    const v2Segments = v2.split('.').map(Number);
    const maxLength = Math.max(v1Segments.length, v2Segments.length);

    for (let i = 0; i < maxLength; i++) {
        const num1 = v1Segments[i] ?? 0;
        const num2 = v2Segments[i] ?? 0;
        if (num1 > num2) return true;
        if (num1 < num2) return false;
    }
    return false;
}

额外优化建议

  • 添加“不再提示”选项:在弹窗中增加“不再提示”按钮,将用户选择存储到globalState,后续升级时根据该状态决定是否展示。
  • 兼容首次安装:首次安装插件时,lastUsedVersion不存在,此时不触发日志展示(若需要首次展示可单独处理)。
  • 格式美化:打开的日志文档可以设置标题或自定义编辑器视图,提升用户体验。

内容的提问来源于stack exchange,提问作者Alex Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:31:07