直接运行 npm run start:dev 即可热重载启动 NestJS 开发服务器,端口默认 3000;VSCode 调试需配置 .vscode/launch.json 并确保 start:debug 脚本启用 --inspect,断点应设在控制器、守卫、拦截器或服务方法内。

直接运行 npm run start:dev 就能启动 NestJS 开发服务器
不需要额外插件或配置,只要项目根目录有 package.json 且已安装依赖(npm install),终端执行 npm run start:dev 即可热重载启动。Nest CLI 默认使用 ts-node-dev 或 nodemon 监听 TypeScript 文件变化,端口通常是 3000。注意:如果报错 Cannot find module 'ts-node',说明本地没全局装或 devDependencies 缺失,补上 npm install --save-dev ts-node 即可。
VSCode 调试必须配好 .vscode/launch.json
默认情况下 VSCode 不知道怎么 attach 到 NestJS 的 TypeScript 进程,必须手动建调试配置。在项目根目录创建 .vscode/launch.json,内容如下:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug NestJS",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "start:debug"],
"env": { "TS_NODE_PROJECT": "tsconfig.json" },
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"port": 9229
}
]
}
关键点:runtimeArgs 必须对应 package.json 中定义的 start:debug 脚本(如 ts-node -r ts-node/register -r tsconfig-paths/register src/main.ts --inspect=0.0.0.0:9229);port 要和脚本里 --inspect 指定的端口一致;env 中的 TS_NODE_PROJECT 确保正确加载路径别名(如有用 tsconfig-paths)。
常见断点不命中?检查三个地方
断点灰色、提示 “unbound breakpoint” 是最常遇到的问题,通常不是代码问题,而是环境或配置错位:
-
tsconfig.json中"sourceMap": true和"outDir"设置是否生效(尤其注意是否被extends覆盖) - VSCode 打开的是项目根目录(不是子文件夹),否则
.vscode/launch.json不生效 - 调试时启动的是
start:debug而非start:dev—— 后者不开启 inspector,无法 attach
验证方式:启动调试后,在 Chrome 访问 chrome://inspect,看能否看到 target 列表里出现你的 NestJS 进程。
调试控制器时,main.ts 入口断点几乎没用
NestJS 初始化快,main.ts 断点容易错过关键流程。真正要调试业务逻辑,应该在:
- 控制器方法内部打断点(如
@Get()装饰器下的函数体) - 守卫(
CanActivate)、拦截器(NestInterceptor)或管道(PipeTransform)的canActivate()、intercept()、transform()方法内 - 服务类中加
console.log或断点前加await new Promise(r => setTimeout(r, 100))防止异步跳过
另外,如果用了 @Inject() 注入动态 provider,确保该 provider 已在模块的 providers 数组中声明,否则 DI 容器找不到实例,调试时变量为 undefined。


















