J'essaie de créer une extension VSCode. Cette extension fournit deux commandes, sans parler de leur implémentation:
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
);
}
Et cela fait partie de mon package.json
fichier:
"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"
}
],
La première commande, qui est censée activer mon extension, fonctionne. Il apparaît dans la palette de commandes et fait ce qu'il est censé faire lorsqu'il est appelé.
Cependant, la deuxième commande, bien qu'elle apparaisse dans la palette de commandes, déclenche le message d'erreur suivant lorsqu'elle est appelée:
command 'extension.useMyExtension' not found
Je trouve bizarre que ma première commande fonctionne bien mais pas la seconde car le code est assez similaire. Des idées pourquoi?
Notez que j'ai évidemment changé certains noms de variables, j'ai vérifié les fautes de frappe dans le vrai code.
Comme mon commentaire a aidé quelqu'un, je voudrais le poster comme réponse pour lui donner plus de visibilité:
J'ai pu résoudre ce problème en compilant manuellement la source TypeScript (en exécutant tsc -p ./
dans mon dossier racine). Cette commande doit être exécutée automatiquement lors du débogage, cependant, je ne pouvais toujours pas trouver pourquoi ce n'était pas le cas sur ma machine.
Vous devez ajouter toutes les commandes enregistrées à la liste activationEvents
dans package.json afin qu'elles soient disponibles lors de l'appel. Mettez à jour votre package.json en tant que tel:
{
...
"activationEvents": [
"onCommand:extension.openMyExtension",
"onCommand:extension.useMyExtension"
]
...
}
Vous pouvez trouver plus de détails sur les événements d'activation dans la version officielle VSCode Documentation .
J'ai eu le même problème. Tout a été configuré correctement mais il s'est avéré que mon package.json manquait une dépendance. Cela a entraîné l'échec du chargement de l'extension et, par conséquent, la commande n'a pas été enregistrée correctement au moment de l'exécution.
Pour découvrir ce qui ne va pas avec votre code, ouvrez l'aide> Toggle Developer Tools et recherchez les erreurs dans la console.
Mon problème est que j'utilisais Cmder comme terminal VS Code. Lorsque j'ai commencé le débogage, la génération ne se terminait jamais - vous pouvez surveiller l'exécution des tâches à partir de la barre d'outils inférieure. Quand j'ai regardé la tâche en cours d'exécution, j'ai vu ceci:
Tâche en cours d'exécution: npm run watch <
VS Code tente d'exécuter le script de surveillance, mais il n'a jamais terminé - je suppose qu'un problème de syntaxe est à l'œuvre ici.
Quoi qu'il en soit, pendant que la compilation fonctionne, je recommanderais plutôt d'exécuter le script watch
pour que votre extension se recompile à chaque changement de fichier:
npm run watch
Vous devriez maintenant pouvoir exécuter votre extension dans votre hôte d'extension via F5
sans avoir à recompiler constamment. (Vous devrez cependant recharger votre hôte)
J'ajoute cette réponse à toute personne qui pourrait rencontrer ce comportement pour la même raison que moi parce qu'il m'a fallu un certain temps pour réaliser ce qui se passait.
J'utilise PowerShell comme terminal par défaut et mon profil a été configuré pour définir le chemin des nouveaux shells (en utilisant Set-Location) dans un dossier spécifique pour plus de commodité sur les autres travaux de développement que je fais.
En appuyant sur F5 pour lancer mon extension, VS Code tentait d'exécuter la commande de compilation à partir de ce répertoire plutôt que de mon répertoire de projet, ce qui a bien sûr échoué.
Cet échec était évident dans les fichiers C:\Users\<your_user_name>\AppData\Roaming\npm-cache\_logs une fois que je me suis rendu compte que j'y regardais.
J'ai supprimé le paramètre de chemin d'accès de mon profil PowerShell et la construction de l'extension VS Code a fonctionné comme prévu.
vous n'avez pas activé l'extension:
"activationEvents": [
"onCommand:extension. useMyExtension"
],