任务提供器和自定义任务类型是什么?
结论
自定义任务让用户在 tasks.json 里写你定义的类型,由插件补全命令并真正执行。清单里声明 taskDefinitions,代码里实现 TaskProvider 的 provideTasks 和 resolveTask。
展开
清单描述这种任务有哪些字段:
{
"taskDefinitions": [
{
"type": "myext",
"required": ["target"],
"properties": {
"target": { "type": "string", "description": "构建目标" }
}
}
]
}
用户然后写:
{ "type": "myext", "target": "app", "problemMatcher": [] }
提供器:
provideTasks返回自动探测到的任务,例如从项目文件里扫出来的脚本。可以返回空,让用户自己写。resolveTask把用户写的那份配置补成可执行的Task,填上ShellExecution或CustomExecution、名称、分组、问题匹配器。
resolveTask 一定要处理。只实现 provideTasks 时,用户手写的 tasks.json 会解析不到。
执行器选 ShellExecution 还是 CustomExecution:能变成一条命令就用 shell,方便用户看见真实命令;需要流式控制和特殊进程时用自定义执行,里面再接伪终端。
工作目录、远程 shell 都要基于当前 WorkspaceFolder,不要用开发机绝对路径。
容易讲错的点
- 任务类型字符串要和清单、
Task构造时的type一致。 provideTasks会在用户打开任务列表时调用,不要在里面同步扫超大目录。- 问题和终端输出要通过
problemMatcher才能进问题面板。只打印文本不会自动变成诊断。