VSCode:如何使用JavaScript API执行任意任务?
问题描述:
在较新版本的VSCode中,我可以创建与我在tasks.json中定义的任何任务的绑定。例如,下面VSCode:如何使用JavaScript API执行任意任务?
{
"version": "2.0.0",
"tasks": [
{
"label": "Clean",
"type": "shell",
"command": "clean.cmd",
"problemMatcher": []
},
{
"label": "Build",
"type": "shell",
"command": "build.cmd",
"problemMatcher": [],
"group": { "kind": "build", "isDefault": true }
},
{
"label": "Flash",
"type": "shell",
"command": "flash.cmd",
"problemMatcher": []
}
]
}
的3个任务我可以创造键绑定与
[
{
"key": "alt+f9",
"command": "workbench.action.tasks.runTask",
"args": "Clean"
},
{
"key": "ctrl+f9",
"command": "workbench.action.tasks.build"
},
{
"key": "f9",
"command": "workbench.action.tasks.runTask",
"args": "Flash"
}
]
,一切都按预期工作。我尝试使用VSCode API在扩展内部(例如Script Commands)执行相同的操作,但它仅适用于build
和test
任务。
调用
vscode.commands.executeCommand("workbench.action.tasks.build")
的作品,但
vscode.commands.executeCommand("workbench.action.tasks.runTask", ["Clean"])
打开任务选择列表。
如何使用JavaScript代码直接启动除build
和test
以外的其他任务?
答
你的任务配置文件看起来很旧。如果您使用Visual Studio Code的新版本,那么您应该升级。
我认为api期待任务有一个“标签”字段。
https://code.visualstudio.com/docs/editor/tasks#_convert-from-010-to-200
所以intsead的:
{
"taskName": "Clean",
"type": "shell",
"command": "clean.cmd",
"problemMatcher": []
},
它应该是:
{
"label": "Clean",
"type": "shell",
"command": "clean.cmd",
"problemMatcher": []
},
更新:尝试只用字符串调用它,而不是在一个这样的数组包裹它的:
vscode.commands.executeCommand("workbench.action.tasks.runTask", "Clean")
我已升级但不影响我的问题.'label'或'taskName'(它仍然受支持),我可以从UI运行任务但不使用JavaScript API。尽管如此,你的回答提醒我要更新这个问题。谢谢。 – Borcut