跳到主要内容

任务提供器和自定义任务类型是什么?

结论​

自定义任务让用户在 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 才能进问题面板。只打印文本不会自动变成诊断。