我正在尝试创建一个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
我觉得很奇怪我的第一个命令工作得很好但不是第二个,因为代码非常相似。有什么想法吗?
请注意,我显然更改了一些变量名称,我在实际代码中仔细检查了拼写错误。
您需要将所有已注册的命令添加到package.json中的activationEvents
列表中,以便它们在调用时可用。像这样更新你的package.json:
{
...
"activationEvents": [
"onCommand:extension.openMyExtension",
"onCommand:extension.useMyExtension"
]
...
}
您可以在官方VSCode Documentation中找到有关激活事件的更多详细信息。
由于我的评论帮助了某些人,我想将其作为答案发布,以提高其可见度:
我能够通过手动编译Typescript源来解决这个问题(通过将tsc -p ./
运行到我的根文件夹中)。这个命令应该在调试时自动运行,但是,我仍然无法找到为什么在我的机器上不是这种情况。
我遇到过同样的问题。一切都配置正确,但事实证明我的package.json缺少一个依赖项。这导致扩展失败加载,因此命令未在运行时正确注册。
要找出代码有什么问题,请打开“帮助”>“切换开发人员工具”,然后在控制台中查找错误。
我的问题是我正在运行Cmder作为我的VS Code终端。当我开始调试时,构建永远不会完成 - 您可以从底部工具栏监视运行任务。当我查看正在运行的任务时,我看到了这个:
执行任务:npm run watch <
VS Code试图运行监视脚本,但它从未完成 - 我猜这里有一些语法问题。
无论如何,虽然编译确实有效,但我建议运行watch
脚本,以便扩展程序在每次更改文件时重新编译:
npm run watch
您现在应该可以通过F5
在扩展主机中运行扩展,而无需不断重新编译。 (你仍然需要重装你的主机)
我正在为可能出现这种行为的人添加这个答案,原因与我做的相同,因为我花了很长时间才意识到发生了什么。
我使用PowerShell作为我的默认终端,并将我的配置文件配置为将新shell的路径(使用Set-Location)设置为特定文件夹,以方便我正在进行的其他开发工作。
当按F5启动我的扩展时,VS Code试图从这个目录而不是我的项目目录运行编译命令,当然这是失败的。
一旦我意识到在那里,这种失败在C:\ Users \ <your_user_name> \ AppData \ Roaming \ npm-cache \ _logs文件中是显而易见的。
我从PowerShell配置文件中删除了路径设置,并且VS Code扩展构建按预期工作。
您尚未激活扩展程序:
"activationEvents": [
"onCommand:extension. useMyExtension"
],