web-dev-qa-db-ja.com

VSCode拡張機能にコマンドが見つかりません

VSCode拡張機能を作成しようとしています。この拡張機能は2つのコマンドを提供しますが、それらの実装は気にしません。

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"
            }
        ],

私の拡張機能を有効にするはずの最初のコマンドが機能します。これはコマンドパレットに表示され、呼び出されたときに実際に行うことを行います。

ただし、コマンドパレットに表示されているにもかかわらず、2番目のコマンドが呼び出されると、次のエラーメッセージが表示されます。

command 'extension.useMyExtension' not found

コードが非常に似ているため、最初のコマンドは正常に機能しますが、2番目のコマンドは正常に機能しません。なぜアイデアがありますか?

私は明らかにいくつかの変数名を変更したことに注意してください、私は実際のコードのタイプミスをダブルチェックしました。

14
Eldy

私のコメントが誰かを助けたので、より多くの可視性を与えるために答えとして投稿したいと思います:

TypeScriptソースを手動でコンパイルすることにより(tsc -p ./をルートフォルダに追加します)。デバッグ時にこのコマンドを自動的に実行する必要がありますが、マシン上でそうではなかった理由を見つけることができませんでした。

2
Eldy

登録されたすべてのコマンドをpackage.jsonのactivationEventsリストに追加して、呼び出しで使用できるようにする必要があります。 package.jsonを次のように更新します。

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

アクティベーションイベントの詳細については、公式の VSCodeドキュメント を参照してください。

5
CallieLInux

同じ問題がありました。すべてが正しく構成されましたが、package.jsonには1つの依存関係が欠けていたことがわかりました。そのため、拡張機能の読み込みに失敗し、結果としてコマンドが実行時に正しく登録されていませんでした。

コードの何が問題なのかを調べるには、[ヘルプ]> [開発者ツールの切り替え]を開き、コンソールでエラーを探します。

1
Bart Theeten

私の問題は、VS CodeターミナルとしてCmderを実行していたことです。デバッグを開始したとき、ビルドは決して完了しませんでした-下部のツールバーから実行中のタスクを監視できます。実行中のタスクを見ると、これを見ました:

タスクの実行:npm run watch <

VS Codeは監視スクリプトを実行しようとしていますが、完了していません-構文上の問題がここで働いていると思います。

とにかく、コンパイルは機能しますが、ファイルが変更されるたびに拡張子が再コンパイルされるように、代わりにwatchスクリプトを実行することをお勧めします。

npm run watch

これで、拡張ホストで拡張機能を実行できるようになりますF5常に再コンパイルする必要なし。 (ただし、ホストをリロードする必要があります)

0
Mister Epic

何が起こっているのかを理解するのにかなりの時間がかかったので、私は私がしたのと同じ理由でこの振る舞いを経験するかもしれない誰のためにでもこの答えを加えています。

PowerShellをデフォルトのターミナルとして使用し、他の開発作業に便利なように(Set-Locationを使用して)新しいシェルのパスを特定のフォルダーに設定するようにプロファイルを構成しました。

F5を押して拡張機能を起動すると、VS Codeはプロジェクトディレクトリではなくこのディレクトリからコンパイルコマンドを実行しようとしましたが、もちろん失敗しました。

この失敗は、C:\ Users\<your_user_name>\AppData\Roaming\npm-cache\_logsファイルで明らかでした。

PowerShellプロファイルからパス設定を削除すると、VS Code拡張機能のビルドが期待どおりに機能しました。

0
intheweeds

拡張機能を有効にしていない:

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