直接运行 npm run start:dev 即可热重载启动,默认监听3000端口;调试必须用 attach 模式连接 dist/main.js,端口9229,且需 sourcemap 路径严格对齐。

直接运行 npm run start:dev 就能热重载启动
不需要额外插件或配置,只要项目根目录有 package.json 且已执行 npm install,终端输入 npm run start:dev 即可启动开发服务器,默认监听 3000 端口。Nest CLI 默认用 ts-node-dev 或 nodemon 监听 TypeScript 文件变化。
常见报错 Cannot find module 'ts-node',说明 ts-node 缺失——补装即可:npm install --save-dev ts-node。注意:这个命令只用于开发启动,**不能用于调试**,因为 ts-node 动态编译不生成标准 .js + sourceMap,VSCode 断点会偏移或灰掉。
调试必须用 attach 模式 + dist/main.js
VSCode 默认的 request: "launch" 配置几乎必然失败:它会自己拉起进程,而 start:debug 脚本已带 --inspect,导致端口冲突或 inspector 未就绪。正确做法是让 VSCode 只监听,不启动。
-
launch.json中request必须设为"attach" - 删掉
runtimeExecutable和runtimeArgs -
port必须和脚本中--inspect的端口一致(默认9229) - 加上
"restart": true,服务重启后调试器自动重连 -
protocol设为"inspector",skipFiles加上["<node_internals>/**"]</node_internals>
示例片段:
{
"type": "node",
"request": "attach",
"name": "Attach to NestJS",
"port": 9229,
"restart": true,
"protocol": "inspector",
"skipFiles": ["<node_internals>/**"]
}</node_internals>
start:debug 脚本必须运行 dist/main.js
别用 ts-node src/main.ts --inspect 这类写法——它绕过编译,断点映射失效。真正可稳定调试的路径只有一条:先编译,再运行 dist/main.js。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
推荐 package.json 中的脚本写法:
"start:debug": "node --inspect=0.0.0.0:9229 dist/main.js"
关键点:
- 必须带
=0.0.0.0:9229,不能只写:9229,否则 Windows/macOS 上可能绑定失败 - 启动后终端必须出现
Debugger listening on ws://127.0.0.1:9229/,没有就说明没生效 - 如果用
nest start --debug 9229,需确认它底层确实生成并运行了dist/main.js(可先手动npm run build验证)
sourceMap 路径对齐是断点命中的前提
断点灰掉、提示 “unbound breakpoint”,80% 是因为 VSCode 找不到原始 .ts 文件。三个地方必须严格同步:
-
tsconfig.json中"sourceMap": true和"outDir": "dist"同时存在,且未被"extends"覆盖(可用npx tsc --showConfig验证最终配置) -
launch.json中outFiles必须设为["${workspaceFolder}/dist/**/*.js"]—— 注意双星号**,漏掉就找不到users/users.controller.js这类嵌套路径下的文件 - VSCode 必须打开项目**根目录**(不是子文件夹),否则
.vscode/launch.json不加载
Controller 和 Service 里打的断点没反应?先确认该类已被模块 controllers 或 providers 显式注册——Nest 根本没加载它,自然不会执行到那行。而 main.ts 里的断点基本无效,初始化太快,调试器 attach 上时模块树早已构建完毕。










