必须装eslint、prettier、path intellisense、nestjs snippets、rest client这5个插件;tsconfig.json需正确配置include、moduleresolution、baseurl和paths,并重启ts服务器;launch.json须用request: "attach"模式且端口一致。

必须装的 5 个插件,少一个就卡半天
VSCode 对 NestJS 的支持不是开箱即用的,不装对插件,连 import 补全都可能失效,Ctrl+Click 跳转直接指向 node_modules 里的声明文件而不是你自己的 src 文件。
-
ESLint:不只是检查语法,它能自动修复import顺序、多余分号、未使用变量;配好"editor.codeActionsOnSave": { "source.fixAll.eslint": true },保存即修正 -
Prettier:NestJS 官方推荐格式化工具;必须设"editor.defaultFormatter": "esbenp.prettier-vscode",否则和 ESLint 冲突 -
Path Intellisense:补全import路径时自动识别@/common这类别名,前提是tsconfig.json的baseUrl和paths已正确配置 -
NestJS Snippets:输入nest-controller回车,直接生成带@Controller()和@Get()的骨架;别手敲装饰器,重复劳动没意义 -
REST Client(或Thunder Client):不用切出 VSCode 就能发GET http://localhost:3000/users;比 Postman 轻,且请求可存为.http文件随项目提交
tsconfig.json 不对齐,所有跳转和补全都白搭
VSCode 的 TypeScript 语言服务依赖 tsconfig.json 才能理解你的模块结构。它不读 nest-cli.json,也不猜路径。
-
"include"必须写成["src/**/*.ts"],不能简写为["src/**/*"],否则.ts文件不被纳入类型检查范围 -
"moduleResolution"必须是"node",否则@nestjs/common这类包的类型无法解析,import补全会漏掉核心装饰器 - 用了路径别名(如
@/core),"baseUrl"得设为".","paths"要和nest build输出的目录结构一致,比如"@/*": ["src/*"] - 改完
tsconfig.json后,必须按Ctrl+Shift+P→ 输入Restart TS server,否则旧缓存还在,补全不会更新
调试前先确认 Node 环境是否真正就位
断点灰掉、console.log 比调试还快——八成不是代码问题,而是 VSCode 根本没找到 node。
- 在 VSCode 内置终端(
Ctrl + `)里运行node -v,没输出就停手;这不是 launch.json 能解决的 - macOS/Linux:检查
which node输出路径,加到~/.zshrc的PATH里,然后彻底退出 VSCode,再从终端执行code . - Windows:确认
C:\Program Files\nodejs\在系统环境变量PATH中;重装 Node.js 时务必勾选 “Add to PATH” - 验证方式:终端里跑
npm run start:debug,看到Debugger listening on ws://127.0.0.1:9229/才算真正启动成功
launch.json 用 attach 模式,别碰 launch
用 request: "launch" 配 NestJS,断点永远是灰色的。因为 NestJS 的 start:debug 脚本已经带了 --inspect,VSCode 再自己拉进程,端口冲突或 inspector 未就绪。
-
request必须设为"attach",让 VSCode 只监听,不启动 -
port必须和package.json里start:debug脚本的端口一致(默认9229) - 删掉
runtimeExecutable和runtimeArgs,它们属于launch场景,放在这里反而干扰 - 加上
"restart": true,这样你改代码后nest start --watch重启服务,调试器自动重连,不用手动点“重新开始”
tsconfig.json 的 include 是否精确匹配 .ts 后缀、PATH 是否被 VSCode 正确继承、以及 launch.json 里那个看似微小却决定成败的 request 字段值。











