如何在Microsoft Visual Studio 2019中调试NestJS TypeScript后端代码并解决报错?
嘿,我来帮你搞定VS2019里调试NestJS TypeScript的问题——这事儿我之前折腾过好多次,踩过不少坑,一步步来肯定能解决:
一、先把项目的TS编译配置捋顺
调试的核心是让VS2019能找到TS源码和编译后JS的对应关系,所以先检查tsconfig.json:
- 打开项目根目录的
tsconfig.json,确保这几个配置是对的:"sourceMap": true:必须开着,编译时会生成.map文件,调试器靠它关联TS代码"outDir": "./dist":默认输出目录,别改乱了,后续调试配置要用到"rootDir": "./src":指定TS源码的根目录,避免编译路径混乱
- 要是之前没编译过,手动跑一次
npm run build,看看dist文件夹里有没有对应的.js和.js.map文件,这步很关键
二、给VS2019配置调试环境
接下来要给VS2019加个适合NestJS的调试配置:
- 直接用VS2019打开NestJS项目的根目录(VS支持打开文件夹当项目用,不用单独建sln)
- 点顶部菜单的调试 > 选项和设置,确认“启用JavaScript调试”已经勾选(默认是开的,但保险起见查一下)
- 点调试 > 添加配置,选Node.js模板,会自动生成
.vscode/launch.json文件(要是没生成,就手动建个.vscode文件夹,再新建launch.json) - 把
launch.json改成下面这样,适配NestJS:
给你解释下关键参数:{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "NestJS Debug", "program": "${workspaceFolder}/src/main.ts", "runtimeArgs": ["--nolazy", "-r", "ts-node/register"], "sourceMaps": true, "cwd": "${workspaceFolder}", "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": ["<node_internals>/**"] } ] }program:指定NestJS的入口文件,就是src/main.ts,别写错路径runtimeArgs:ts-node/register让Node能直接跑TS文件,不用每次手动编译;--nolazy是防止调试器偷懒,确保断点能精准命中sourceMaps:开着它,调试器才能关联TS源码
三、解决你遇到的调试错误(弹窗问题)
如果调试时弹窗报错、断点没命中,大概率是这几个原因:
- Source Map没生成或者路径不对:
- 再检查
tsconfig.json的sourceMap是不是true,跑一次npm run build看看dist里的.map文件 - 要是VS提示“找不到对应源码”,调试时右键点击调用栈里的文件,选“加载符号”,手动指定
.map文件的路径就行
- 再检查
- 缺依赖:
- 确保装了
ts-node和typescript作为开发依赖,没装的话跑这个命令:npm install --save-dev ts-node typescript
- 确保装了
- VS用的Node版本不对:
- 打开工具 > 选项 > 项目和解决方案 > Web包管理 > Web外部工具,把你本地Node的安装路径(比如
C:\Program Files\nodejs)移到最上面,让VS用你项目对应的Node版本,别用它自带的旧版本
- 打开工具 > 选项 > 项目和解决方案 > Web包管理 > Web外部工具,把你本地Node的安装路径(比如
- 断点打错地方了:
- 别在
import语句、空行或者永远不会执行的代码上打断点,找个实际会跑的逻辑,比如控制器的路由处理函数,打在那里试试
- 别在
四、启动调试验证
配置好之后:
- 在
src里的TS文件(比如某个控制器的接口方法)上打个断点 - 点调试工具栏的绿色三角按钮(或者按F5)启动调试
- 用Postman或者浏览器访问对应的接口,应该就能命中断点了,此时可以查看变量、单步执行,想怎么调就怎么调
内容的提问来源于stack exchange,提问作者Sanket Patel
相关产品推荐
相关产品推荐

