Расширение VSCode: не найден обработчик для команды: 'sd.edit'

Я работаю над расширением и могу с радостью протестировать его в отладчике! Однако после того, как я упаковываю расширение и устанавливаю его вручную, я получаю сообщение об ошибке при попытке выполнить команды:

Не найден обработчик для команды: 'sd.edit' (или другой подходящей команды, sd.edit - это та, которую я тестировал для этого)

Вот мой extension.ts:

// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
import * as vscode from 'vscode'; 
import * as sd from './sd';
import * as fileutil from './fileutil';
import * as indicator from './sdIndicator';

// this method is called when your extension is activated
// your extension is activated the very first time the command is executed
export function activate(context: vscode.ExtensionContext) {

    let sdIndicator = new indicator.SdIndicator();
    context.subscriptions.push(sdIndicator); 

    // The command has been defined in the package.json file
    // Now provide the implementation of the command with  registerCommand
    // The commandId parameter must match the command field in package.json
    var editCommand = vscode.commands.registerCommand('sd.edit', () => {
        let sdWrapper = new sd.SdWrapper();
        sdWrapper.Edit(vscode.window.activeTextEditor.document.fileName);
        sdIndicator.UpdateStatusBar();
    });

    context.subscriptions.push(editCommand);

    var sdRevert = vscode.commands.registerCommand('sd.revert', () => {
        let sdWrapper = new sd.SdWrapper();
        sdWrapper.Revert(vscode.window.activeTextEditor.document.fileName);
        sdIndicator.UpdateStatusBar();
    });

    context.subscriptions.push(sdRevert);
}

и package.json, который определяет команды:

{
    "name": "vscode-sd",
    "displayName": "sd",
    "description": "SD integration with vscode",
    "version": "0.0.1",
    "publisher": "ryzngard",
    "engines": {
        "vscode": "^0.10.1"
    },
    "categories": [
        "Other"
    ],
    "activationEvents": [
        "*"
    ],
    "main": "./out/src/extension",
    "contributes": {
        "commands": [
            {
                "command": "sd.edit",
                "title": "SD Edit File"
            },
            {
                "command": "sd.revert",
                "title": "SD Revert File"
            }]
    },
    "scripts": {
        "vscode:prepublish": "node ./node_modules/vscode/bin/compile",
        "compile": "node ./node_modules/vscode/bin/compile -watch -p ./"
    },
    "devDependencies": {
        "typescript": "^1.6.2",
        "vscode": "0.10.x"
    }
}

Для меня все выглядело неуместным, и тот факт, что он работает путем отладки расширения, кажется странным. Как можно отладить установленное расширение? Есть ли другие вещи, на которые мне следует обратить внимание?

Я попытался добавить вывод console.log в функцию активации, но я тоже не знаю, куда это идет.


person ryzngard    schedule 16.12.2015    source источник
comment
Я запустил еще одно расширение и добавил к нему то, что, как мне казалось, было паритетным, и оно отлично работает. Я предполагаю, что есть небольшая опечатка, которую я пропустил где-то в package.json или extension.ts   -  person ryzngard    schedule 05.01.2016


Ответы (1)


Сегодня я столкнулся с этой проблемой и выдергивал волосы, пытаясь понять, в чем проблема. Он работал во время отладки, но не работал после упаковки и установки. Чтобы было немного яснее, если бы я упаковал в свой ящик разработчика, установка будет работать, как ожидалось, но если бы моя машина CI (VSTS) построила ее, это не было бы.

Оказывается, размер созданного файла VSIX отличался на порядок. Это произошло из-за того, что количество node_modules в VSIX сильно варьировалось! После расследования выясняется, что проблема возникла из-за разницы между npm2 и npm3. npm2 (это то, что VSTS делает сегодня) упаковывает модули npm иначе, чем npm3 (и, очевидно, это несовместимо с VS Code).

person Jeff Young    schedule 19.01.2016
comment
Интересно! Это могло быть проблемой, но я не уверен, так как у меня больше нет старого проекта. Однако это полезно знать для будущей отладки! - person ryzngard; 19.01.2016