tasks.json必须严格置于工作区根目录的.vscode/tasks.json路径下,文件名小写且不可更改;否则VSCode完全不识别,Tasks: Run Task菜单为空。

tasks.json 不在项目根目录的 .vscode/ 下,或文件名不是 tasks.json,VSCode 就根本看不到你的任务。
tasks.json 必须放在哪、叫什么名
VSCode 只读取工作区根目录下 .vscode/tasks.json 这一个路径。不是 task.json,不是 .vscode/tasks/tasks.json,也不是子文件夹里同名文件——哪怕只多一个空格、少一个点,Tasks: Run Task 菜单里就彻底为空。
常见错误现象:
-
Ctrl+Shift+P → Tasks: Run Task列表里只有npm: xxx,没有你定义的label - 手动运行
tsc --build成功,但 VSCode 里点不动 - 改了配置反复保存,终端没反应——先查路径和文件名是否严格匹配
为什么 tsc --watch 无法跳转到错误行
VSCode 默认把 tsc --watch 当作普通前台命令执行,输出红字只是文本流,不解析为可定位问题。必须配 problemMatcher + isBackground: true 才能激活错误高亮和 F8 跳转。
实操建议:
- 显式写
"isBackground": true,否则 VSCode 认为任务已结束,后续输出不再捕获 - 用
"problemMatcher": "$tsc-watch"(不是$tsc),这是 TypeScript 官方为监听模式设计的匹配器 - 首次启动需手动运行一次任务;
--watch模式不会自动触发,保存后也不会构建,原生不支持runOnSave
npm run build 报 command not found 怎么办
VSCode 的任务进程默认不加载 shell 配置(如 ~/.zshrc),也不自动使用项目级 Node.js 版本(比如 nvm 或 volta 管理的版本)。直接写 "command": "npm" 很可能找不到命令,或调用到系统全局旧版 Node。
可靠做法:
- 改用
npx --no-install:例如"command": "npx","args": ["--no-install", "tsc", "--build"] - 或指向本地二进制:
"command": "./node_modules/.bin/tsc",避免依赖全局安装 - 需要
.env变量时,必须手动补全"env"字段,例如"env": { "NODE_ENV": "development" } - Windows 用户若用 PowerShell 脚本,记得加
"shell": { "executable": "pwsh", "args": ["-Command"] },否则脚本被策略拦截
dependsOn 写了却还是并行执行?
VSCode 的 dependsOn 默认只控制启动顺序,不等前一个结束就开下一个。尤其当依赖项是 tsc --watch 或 webpack serve 这类长期运行的任务时,后续部署任务大概率在构建完成前就冲进去。
关键点:
- 必须加
"dependsOrder": "sequence",缺了它即使写了dependsOn,也会并行跑 - 给每个依赖任务显式设
"isBackground": false(虽然默认就是 false,但写出来更安全) - 如果依赖的是监听类任务,得配
problemMatcher并触发endOfLine信号,否则 VSCode 认为它永远没结束
最常被忽略的一点:问题匹配器不只是为了报错好看——它决定了 VSCode 是否认为任务“真正结束”,进而影响 dependsOrder 的串行逻辑。没配对,sequence 就形同虚设。


















