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

VS Code扩展中when子句不生效问题求助

问题分析与解决方案

核心问题在于你的package.json配置结构错误:menus字段被放在了contributes外部,导致VS Code无法读取到命令面板的可见性控制规则,命令因此默认始终显示在命令面板中。

修正后的package.json配置

将menus移至contributes内部,确保VS Code能解析到命令面板的显示条件:

"contributes": {
    "commands": [
        {
            "command": "gitHome.goHome",
            "title": "Open repository's origin URL",
            "category": "Git Home"
        }
    ],
    "menus": {
        "commandPalette": [
            {
                "command": "gitHome.goHome",
                "when": "gitHome.isGit"
            }
        ]
    }
}

完善扩展逻辑

除了配置修正,你还需要实现真正的Git仓库判断逻辑,并在工作区变化时动态更新上下文:

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

// 判断当前目录是否为Git仓库
function isGitRepository(cwd: string): boolean {
    try {
        const gitDir = path.join(cwd, '.git');
        return fs.existsSync(gitDir);
    } catch {
        return false;
    }
}

// 更新Git仓库状态上下文
async function updateGitContext() {
    const workspaceFolders = vscode.workspace.workspaceFolders;
    const cwd = workspaceFolders ? workspaceFolders[0].uri.fsPath : '';
    const isGit = cwd ? isGitRepository(cwd) : false;
    await vscode.commands.executeCommand('setContext', 'gitHome.isGit', isGit);
}

export async function activate(context: vscode.ExtensionContext) {
    // 初始化上下文
    await updateGitContext();

    // 注册命令
    const cmdGoHome = vscode.commands.registerCommand('gitHome.goHome', () => {
        const workspaceFolders = vscode.workspace.workspaceFolders;
        if (workspaceFolders) {
            // 这里实现你的goHome逻辑
        }
    });
    context.subscriptions.push(cmdGoHome);

    // 监听工作区变化,动态更新上下文
    const workspaceListener = vscode.workspace.onDidChangeWorkspaceFolders(updateGitContext);
    context.subscriptions.push(workspaceListener);
}

验证步骤

  1. 保存修正后的配置和代码
  2. 按F5重新启动扩展开发宿主窗口
  3. 打开一个Git仓库和非Git仓库,分别打开命令面板(Ctrl+Shift+P/Cmd+Shift+P),验证命令的可见性是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:46:01