tasks.json 是 VSCode 项目级任务配置文件,必须置于 .vscode/tasks.json,不可写入 settings.json;最小配置需 version、tasks 数组及 task 的 label 和 command。
tasks.json 是什么,为什么不能直接写在 settings.json 里
tasks.json 是 vscode 专门用于定义「可执行任务」的配置文件,必须放在工作区根目录的 .vscode/tasks.json 路径下。它不是全局设置,也不支持写进 settings.json —— 因为任务本质是项目级行为(比如构建当前项目的 typescript、运行某个测试脚本),和用户偏好或编辑器 ui 无关。vscode 启动时只扫描 .vscode/tasks.json,其他位置的同名文件会被忽略。
最简可用的 tasks.json 结构长什么样
一个能保存即运行的最小配置,只需三要素:version、tasks 数组、每个 task 的 label 和 command。注意:VSCode 1.84+ 默认要求 version 为 "2.0.0",旧版 "0.1.0" 已弃用。
{
"version": "2.0.0",
"tasks": [
{
"label": "echo hello",
"type": "shell",
"command": "echo 'Hello from tasks.json'"
}
]
}
保存后按 Ctrl+Shift+P(macOS 是 Cmd+Shift+P),输入 Tasks: Run Task,回车,选 echo hello 即可看到输出。关键点:
-
type必须是"shell"(跨平台)或"process"(直接调进程,Windows 下 cmd.exe 有时不认引号) -
label是你在命令面板里看到的名字,必须唯一 - 不加
group就不会出现在终端顶部的「运行任务」下拉里
如何让任务自动触发编译并监听文件变化
要实现「保存 TS 文件 → 自动编译 → 错误实时显示」,核心是把 tsc --watch 做成一个 isBackground: true 的后台任务,并配好 problemMatcher 解析错误行。否则 VSCode 不知道哪行报错了,也不会在编辑器里标红线。
常见错误现象:任务运行了,终端里有输出,但编辑器里没错误提示,或者任务卡住不动。
正确做法:
- 加
"isBackground": true,告诉 VSCode 这是个长期运行的任务 - 用
"problemMatcher": ["$tsc-watch"]匹配 TypeScript 监听输出(VSCode 内置) - 必须提供
"runOptions": { "reevaluateOnRerun": true }防止重启任务时参数失效 - 如果用自定义构建命令(如
npm run build:watch),得自己写正则匹配器,或改用"$tsc-watch"对应的输出格式
示例片段:
{
"label": "tsc: watch",
"type": "shell",
"command": "tsc",
"args": ["--watch"],
"isBackground": true,
"problemMatcher": ["$tsc-watch"],
"group": "build"
}
运行任务时提示 "Command failed with exit code 1" 怎么查
这个错误本身没信息量,真正线索藏在 VSCode 终端面板的「任务」标签页里。重点看三处:
- 第一行是否显示了实际执行的完整命令(含路径、参数)—— 检查
command和args是否拼错,比如写成"tsc -w"却没装全局tsc - 有没有
cwd字段?没设的话默认是工作区根目录,但如果你的package.json在子目录,就得显式加"cwd": "./src" - 是否用了
dependsOn?依赖任务失败会导致主任务直接退出,且错误堆栈可能被吞掉;建议先单独运行依赖项验证
调试技巧:临时把 command 改成 "echo" + 所有 args,确认路径和参数拼接逻辑没问题,再换回真实命令。
复杂点在于:任务配置里的变量(如 ${file}、${workspaceFolder})在不同上下文展开结果不同,尤其跨平台时路径分隔符容易出错;这些细节不报错,但会让命令根本执行不到预期位置。








