tasks.json必须严格置于项目根目录的.vscode/tasks.json路径下,文件名全小写、无空格或额外后缀,且仅在文件夹工作区中生效;否则tasks菜单为空、快捷键无效。

tasks.json 必须放在项目根目录的 .vscode/ 下,且文件名不能错
VSCode 只认 .vscode/tasks.json 这一个路径——不是 task.json、不是 .vscode/tasks/tasks.json、也不是用户级配置目录里的同名文件。文件名含空格(如 tasks .json)或后缀多加了 .bak,VSCode 直接忽略,不报错也不加载。
常见静默失败现象:
- 按
Ctrl+Shift+P→ 输入Tasks: Run Task,列表为空 -
Ctrl+Shift+B没反应 - 终端里手动运行
tsc --build成功,但 VSCode 里点不动任务
必须用 File → Open Folder 打开整个项目文件夹;单文件模式(File → Open File)根本不会读取 .vscode/ 目录。
label 和 group 决定能不能用快捷键一键触发
想让 Ctrl+Shift+B 直接跑你的任务,光写 label 不够,还得配 "group": "build",然后在命令面板运行 Tasks: Configure Default Build Task 选中它。否则这个快捷键永远只认“默认构建任务”,别的 label 再好也没用。
如果想用自定义快捷键(比如 Alt+R 跑 npm start),不能直接绑定命令字符串,得走任务系统:
- 先确保
tasks.json里有"label": "npm start" - 打开快捷键设置(
Ctrl+K Ctrl+S),搜Tasks: Run Task - 找到那条带
"args": "npm start"的条目,右键 → “更改键绑定” - 注意:别搜
workbench.action.terminal.runActiveFile或sendSequence,那些是发文本到终端,不自动cd、不保环境、容易静默失败
type: "shell" vs type: "npm" —— 环境变量和执行逻辑完全不同
type: "npm" 看似方便,但它不继承 shell 环境:nvm 切的 Node 版本、~/.zshrc 里的别名、甚至 $PATH 里的本地 bin 都不可见。它只认 package.json 里 scripts 下严格匹配的 key(大小写、空格全要对)。
type: "shell" 更可靠,支持管道、变量展开、本地脚本,但要注意:
- Windows 上跑
.ps1脚本,默认被 PowerShell 执行策略拦截,必须显式指定:"shell": { "executable": "pwsh", "args": ["-Command"] } - Node.js 项目推荐写法:
"command": "npx", "args": ["--no-install", "tsc", "--build"],避免全局安装污染,也绕过 npm 的环境限制
isBackground 和 problemMatcher 缺一不可,尤其对监听类任务
TypeScript 的 --watch、ESLint 的 --fix-dry-run 这类长期运行的任务,不加 "isBackground": true,VSCode 就会一直等它“退出”,结果就是终端卡住、错误不捕获、F8 跳转失效。
而 problemMatcher 是错误进 Problems 面板的唯一通道:
-
"problemMatcher": "$tsc-watch"(不是$tsc)才能匹配 watch 模式下的增量报错 -
"problemMatcher": "$eslint-stylish"是 ESLint 官方推荐,自己写正则容易漏掉行号或文件路径 - 没配
problemMatcher,再红的报错也只是终端里一串文字,VSCode 当它不存在
最常被忽略的细节:version 字段必须是字符串 "2.0.0",写成 2.0 或 "2",整个 tasks.json 就静默失效——VSCode 不提示,也不报错,只是假装没看见。











