tasks.json必须严格放在工作区根目录的.vscode/tasks.json路径下,文件名全小写、无空格或额外后缀;VSCode只识别此唯一路径,否则Tasks菜单为空。

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 里点不动;改了配置反复保存,终端没反应——先查路径和文件名是否严格匹配。
额外注意:如果你只是打开了单个文件(没用「File → Open Folder」),那整个 .vscode/ 目录都不会被加载,Tasks 菜单直接为空。
为什么 tsc --watch 不报错也不跳转到错误行
因为 VSCode 默认把 tsc --watch 当作普通前台命令执行,输出红字只是文本流,不解析、不定位。要让它真正“活”起来,必须同时满足三个条件:
-
"isBackground": true:告诉 VSCode “这任务不会退出,持续监听” -
"problemMatcher": "$tsc-watch":不是$tsc,后者只匹配一次性构建的错误格式 - 首次需手动运行一次任务:保存文件不会自动触发,VSCode 原生不支持
runOnSave
示例关键字段:
{
"label": "tsc-watch",
"type": "shell",
"command": "tsc",
"args": ["--watch"],
"isBackground": true,
"problemMatcher": "$tsc-watch"
}
dependsOn 写了却还是并行执行?
dependsOn 默认只控制启动顺序,不等前一个结束就开下一个。尤其当依赖项是 tsc --watch 或 webpack serve 这类长期运行的任务时,后续部署任务大概率在构建完成前就冲进去。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
关键点:必须加 "dependsOrder": "sequence",缺了它,dependsOn 就形同虚设。
另外要注意:isBackground: true 的任务无法作为 dependsOn 的前置依赖——VSCode 无法判断它何时“完成”。若需串联,应让前置任务是短时退出型(如 tsc --build),再用 "dependsOrder": "sequence" 控制顺序。
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"] },否则脚本被策略拦截
复杂点在于:这些路径和环境变量都得硬编码进 JSON,没法动态加载 shell 初始化逻辑。容易被忽略的是,dependsOn 和 problemMatcher 同时存在时,VSCode 对任务生命周期的判断会更敏感——一个字段写错,整个链就卡在“启动但无响应”状态。

















