根本原因是vscode未继承shell的path环境变量,尤其macos/linux下gui启动时跳过~/.zshrc;需在settings.json中注入对应平台path并彻底重启vscode,再验证node -v及调试器是否生效。

VSCode 里查不到 node -v 或调试时提示 “Node not found”,根本原因不是 VSCode 本身有问题,而是它没继承你 shell 里的 node 可执行路径——尤其在 macOS/Linux 下用 Dock 或 GUI 启动 VSCode 时,PATH 常被截断。
终端能跑 node -v,但 VSCode 调试器报错找不到 Node
这不是 VSCode 故意搞鬼,是它启动时没加载 shell 的环境变量。你在 Terminal 里敲 which node 得到的路径(比如 /opt/homebrew/bin/node),VSCode 根本不知道。
- 打开集成终端(
Ctrl + `),运行which node,记下完整路径 - 在项目根目录下的
.vscode/settings.json中写入对应平台的环境变量注入配置:
macOS 示例:"terminal.integrated.env.osx": { "PATH": "/opt/homebrew/bin:${env:PATH}" }
Linux 示例:"terminal.integrated.env.linux": { "PATH": "/usr/local/bin:${env:PATH}" } - 改完必须重启 VSCode——热重载不生效,环境变量只在启动时读取一次
- 重启后,在集成终端再跑
node -v,确认输出;再进“运行和调试”面板点 F5,看是否还报 Node 找不到
launch.json 里 program 指向 .ts 文件却报错“Cannot find module”
VSCode 的 node 调试器只认 JavaScript,不解析 TypeScript。哪怕你装了 ts-node,program 字段也不能直接写 src/index.ts。
ZenHeart zenlink 与 zenlink-mcp 为 OpenClaw,涵盖安装、MCP 注册、钩子接线、入站轮询及升级维护。
- 要么把
program改成编译后的路径,比如"${workspaceFolder}/dist/index.js" - 要么改用
runtimeExecutable指向ts-node:添加字段"runtimeExecutable": "ts-node",同时确保ts-node已全局或本地安装 - 如果选后者,别漏掉
"runtimeArgs": ["--project", "${workspaceFolder}/tsconfig.json"],否则ts-node可能读不到你的类型配置 - ESM 项目还需加
"env": {"NODE_OPTIONS": "--enable-source-maps"},不然断点映射会失效
断点灰掉、点了没反应,但 launch.json 看着没问题
90% 的情况是 type 或 request 字段写错了,或者 VSCode 没识别出当前配置属于 Node.js 调试器。
- 检查
type必须是"node"(不是"pwa-node",也不是空或拼错) - 检查
request是"launch"还是"attach"—— 两者不能混用;"launch"对应直接运行文件,"attach"对应连已启动的node --inspect进程 - 如果用了
nodemon,别在program里写nodemon命令,要改用runtimeExecutable+runtimeArgs组合 - 断点灰掉时,把鼠标悬停在行号左侧灰色圆点上,VSCode 会提示具体原因,比如 “Breakpoint ignored because generated code not found”——这说明 sourceMap 链路断了,不是环境问题
真正容易被忽略的是:VSCode 的调试器和终端共享 PATH,但和系统 GUI 启动方式解耦。哪怕你用 nvm use 切换了版本,只要没把 nvm 初始化脚本注入到 VSCode 启动环境里,它就永远看不到那个版本。验证这件事,永远比猜配置更省时间。










