Команда не найдена в расширении VSCode

Я пытаюсь создать расширение 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

Мне показалось странным, что моя первая команда работает нормально, но не вторая, так как код очень похож. Любые идеи почему?

Обратите внимание, что я, очевидно, изменил имена переменных, я дважды проверял наличие опечаток в реальном коде.

Ответ 1

Поскольку мой комментарий кому-то помог, я хотел бы опубликовать его как ответ, чтобы сделать его более заметным:

Я смог решить эту проблему, вручную скомпилировав исходный tsc -p./ (запустив tsc -p./ в мою корневую папку). Эта команда должна запускаться автоматически при отладке, однако я так и не смог выяснить, почему это не так на моей машине.

Ответ 2

Вам необходимо добавить все зарегистрированные команды в список activationEvents в package.json, чтобы они были доступны при вызове. Обновите файл package.json следующим образом:

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

Вы можете найти более подробную информацию о событиях активации в официальной документации VSCode.

Ответ 3

Я была такая же проблема. Все было настроено правильно, но оказалось, что в моем package.json отсутствует одна зависимость. Это привело к сбою загрузки расширения и, следовательно, к неправильной регистрации команды во время выполнения.

Чтобы узнать, что не так с вашим кодом, откройте "Справка"> "Переключить инструменты разработчика" и найдите ошибки в консоли.

Ответ 4

Моя проблема в том, что я использую Cmder в качестве терминала VS Code. Когда я начинал отладку, сборка никогда не завершалась - вы можете отслеживать выполнение задач с нижней панели инструментов. Когда я посмотрел на выполняемую задачу, я увидел это:

Выполнение задачи: npm run watch <

VS Code пытается запустить скрипт наблюдения, но он так и не закончился - я предполагаю, что здесь работает какая-то синтаксическая проблема.

В любом случае, хотя компиляция работает, я бы рекомендовал вместо этого запускать скрипт watch чтобы ваше расширение перекомпилировалось при каждом изменении файла:

npm run watch

Теперь вы сможете запускать свое расширение на хосте расширений через F5 без необходимости повторной компиляции. (Вам все равно придется перезагрузить хост)

Ответ 5

Я добавляю этот ответ всем, кто может испытывать такое поведение по той же причине, что и я, потому что мне потребовалось довольно много времени, чтобы осознать, что происходит.

Я использую PowerShell в качестве терминала по умолчанию, и мой профиль настроен для установки пути новых оболочек (с помощью Set-Location) к определенной папке для удобства других работ по разработке, которые я выполняю.

При нажатии F5 для запуска моего расширения VS Code пытался запустить команду компиляции из этого каталога, а не из моего каталога проекта, что, конечно, не удалось.

Эта ошибка была очевидна в файлах C:\Users\& lt; your_user_name & gt;\AppData\Roaming\npm-cache\_logs, как только я понял, что заглянул туда.

Я удалил настройку пути из своего профиля PowerShell, и сборка расширения VS Code работала, как и ожидалось.

Ответ 6

Вы не активировали расширение:

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