VSCode本身不编译TypeScript,必须安装tsc、配置有效tsconfig.json(含outDir、rootDir、sourceMap等)并用tasks.json设置isBackground:true的tsc --watch任务才能实现保存自动编译和调试。

VSCode 本身不编译 TypeScript,它只靠 tsc 命令干活;没装 tsc、没配 tsconfig.json、或配置里关了输出,就根本不会生成 .js 文件——这不是 VSCode 的问题,是编译链断在了第一步。
确认 tsc 是否可用且版本匹配
VSCode 不自带可执行的 tsc,它调用的是你本地安装的 TypeScript 编译器。终端里运行 tsc --version 报错或版本太老(比如低于 4.9),后续所有编译、类型检查、sourceMap 都可能异常。
- 推荐项目级安装:
npm install --save-dev typescript,避免全局版本污染 - 装完后验证:
npx tsc --version必须有输出,且建议 ≥ 5.0(支持satisfies、更准的路径解析) - VSCode 要用项目里的 TS:在工作区设置中加
"typescript.tsdk": "./node_modules/typescript/lib" - 改完设置后必须手动重启 TS 服务:
Ctrl+Shift+P→ 输入TypeScript: Restart TS server
tsconfig.json 里哪些字段一错就编译失败
空的 tsconfig.json 或仅含 {} 是无效的。tsc 会降级为单文件编译,忽略 outDir、include 等关键行为,导致 JS 文件不生成、路径别名失效、调试断点跳不到源码。
-
"noEmit": true是最隐蔽的坑:它让tsc只做类型检查,完全不输出 JS,但 VSCode 里看着一切正常 -
"outDir"必须存在且不能和"rootDir"重叠(比如都设成"./"),否则可能循环写入或报错 -
"include"必须显式覆盖你的源码,例如["src/**/*"];若用了"files",漏写一个文件就彻底不编译 -
"sourceMap": true和"inlineSourceMap": false要配对,否则调试时找不到映射关系
用 tasks.json 绑定 tsc --watch 实现保存即编译
VSCode 默认不监听文件变化,按 Ctrl+Shift+B 手动触发也不够快。真正自动编译靠的是 tsc --watch 后台任务,而它必须通过 tasks.json 正确配置才能跑起来。
使用 Scrapfly SDK(scrapfly-sdk)在 TypeScript 或 JavaScript 中进行网页抓取,用于用户请求抓取 URL、绕过反爬虫防护、渲染页面等场景。
- 不要用 VSCode 自动生成的模板任务,它常含冗余字段;直接建
.vscode/tasks.json并填入:
{
"version": "2.0.0",
"tasks": [
{
"label": "tsc: watch",
"type": "shell",
"command": "npx tsc",
"args": ["--watch"],
"isBackground": true,
"problemMatcher": "$tsc-watch",
"group": "build"
}
]
}
"isBackground": true 缺失会导致任务启动后立刻退出,无法监听"problemMatcher": "$tsc-watch" 缺失会让错误不出现在“问题”面板,只能看终端tsconfig.json 中 "noEmit" 为 false,否则 --watch 也白搭调试时报 Cannot launch program ... because corresponding JavaScript cannot be found
这个错误不是代码写错了,是 VSCode Debugger 找不到编译后的 JS 入口。它和 tsconfig.json、launch.json、文件目录结构三者强绑定,任意一环错位都会失败。
-
tsconfig.json中"outDir": "./dist"和"rootDir": "./src"必须明确,且"sourceMap": true -
launch.json的"program"必须指向编译后路径,例如"${workspaceFolder}/dist/index.js" - 如果
package.json里"type": "module",launch.json还得加"runtimeArgs": ["--enable-source-maps"] - 别依赖 “自动检测”,手动在
launch.json加"preLaunchTask": "tsc: watch",确保先编译再调试
最容易被忽略的其实是 tsconfig.json 的生效范围:它只从当前打开的文件夹向上查找一次,子目录里的 tsconfig.json 不会被父项目继承;另,VSCode 右下角显示的 TypeScript 版本号必须是 Version X.X.X (local),不是 Bundled——这点不确认,后面所有配置都可能白忙。










