在VSCode扩展中找不到命令

问题描述 投票:10回答:4

我正在尝试创建一个VSCode扩展。这个扩展提供了两个命令,不用介意它们的实现:

export function activate(context: ExtensionContext) {

    const provider = new ContentProvider();
    const providerRegistrations = Disposable.from(
        workspace.registerTextDocumentContentProvider(ContentProvider.scheme, provider)
    );

    // Open the dynamic document, and shows it in the next editor
    const openMyExtensionCommandRegistration = commands.registerTextEditorCommand('extension.openMyExtension', editor => {
        // Activate the extension and do something
    });

    const useMyExtensionCommandRegistration = commands.registerTextEditorCommand('extension.useMyExtension', editor => {
        // Do something
    });

    context.subscriptions.push(
        provider,
        openMyExtensionCommandRegistration,
        useMyExtensionCommandRegistration,
        providerRegistrations
    );
}

这是我的package.json文件的一部分:

"activationEvents": [
        "onCommand:extension.openMyExtension"
    ],
    "main": "./out/extension",
    "contributes": {
        "commands": [
            {
                "command": "extension.openMyExtension",
                "title": "Open my extension",
                "category": "MyExtension"
            },
            {
                "command": "extension.useMyExtension",
                "title": "Do something with my extension",
                "category": "MyExtension"
            }
        ],

第一个命令,它应该激活我的扩展,工作。它出现在命令面板中,并实际执行调用时应该执行的操作。

但是,第二个命令尽管出现在命令面板中,但在调用时会引发以下错误消息:

command 'extension.useMyExtension' not found

我觉得很奇怪我的第一个命令工作得很好但不是第二个,因为代码非常相似。有什么想法吗?

请注意,我显然更改了一些变量名称,我在实际代码中仔细检查了拼写错误。

typescript visual-studio-code vscode-extensions
4个回答
4
投票

您需要将所有已注册的命令添加到package.json中的activationEvents列表中,以便它们在调用时可用。像这样更新你的package.json:

{
    ...
    "activationEvents": [
        "onCommand:extension.openMyExtension",
        "onCommand:extension.useMyExtension"
    ]
    ...
}

您可以在官方VSCode Documentation中找到有关激活事件的更多详细信息。


2
投票

由于我的评论帮助了某些人,我想将其作为答案发布,以提高其可见度:

我能够通过手动编译Typescript源来解决这个问题(通过将tsc -p ./运行到我的根文件夹中)。这个命令应该在调试时自动运行,但是,我仍然无法找到为什么在我的机器上不是这种情况。


1
投票

我遇到过同样的问题。一切都配置正确,但事实证明我的package.json缺少一个依赖项。这导致扩展失败加载,因此命令未在运行时正确注册。

要找出代码有什么问题,请打开“帮助”>“切换开发人员工具”,然后在控制台中查找错误。


0
投票

我的问题是我正在运行Cmder作为我的VS Code终端。当我开始调试时,构建永远不会完成 - 您可以从底部工具栏监视运行任务。当我查看正在运行的任务时,我看到了这个:

执行任务:npm run watch <

VS Code试图运行监视脚本,但它从未完成 - 我猜这里有一些语法问题。

无论如何,虽然编译确实有效,但我建议运行watch脚本,以便扩展程序在每次更改文件时重新编译:

npm run watch

您现在应该可以通过F5在扩展主机中运行扩展,而无需不断重新编译。 (你仍然需要重装你的主机)


0
投票

我正在为可能出现这种行为的人添加这个答案,原因与我做的相同,因为我花了很长时间才意识到发生了什么。

我使用PowerShell作为我的默认终端,并将我的配置文件配置为将新shell的路径(使用Set-Location)设置为特定文件夹,以方便我正在进行的其他开发工作。

当按F5启动我的扩展时,VS Code试图从这个目录而不是我的项目目录运行编译命令,当然这是失败的。

一旦我意识到在那里,这种失败在C:\ Users \ <your_user_name> \ AppData \ Roaming \ npm-cache \ _logs文件中是显而易见的。

我从PowerShell配置文件中删除了路径设置,并且VS Code扩展构建按预期工作。


0
投票

您尚未激活扩展程序:

"activationEvents": [
    "onCommand:extension. useMyExtension"
],

-3
投票

您的问题与此问题类似:https://github.com/Microsoft/vscode/issues/25026

© www.soinside.com 2019 - 2024. All rights reserved.