能直接在vscode终端敲node -v和npm -v看到版本号才算环境真正就位;否则调试、运行、插件均无效,根本原因是vscode未继承shell的path,需彻底重启vscode并验证路径是否正确写入系统变量或shell配置。

能直接在 VSCode 终端里敲 node -v 和 npm -v 并看到版本号,才算环境真正就位;否则所有调试、运行、插件都是空中楼阁。
node 和 npm 在系统终端能跑,但在 VSCode 里报 command not found
这不是 VSCode 的 bug,而是它没继承你 shell 的 PATH。Windows/macOS/Linux 表现不同,但根因一致:VSCode 启动时读取的是旧环境变量快照。
- 关掉所有 VSCode 窗口(macOS 在 Dock 右键选「退出」,Windows 在任务管理器确认
Code.exe已结束) - 新开一个系统终端(不是 VSCode 内置终端),执行
where node(Windows)或which node(macOS/Linux),确认路径指向你安装的 Node.js(比如C:\Program Files\nodejs\node.exe或/usr/local/bin/node) - 再打开 VSCode,按
Ctrl+`打开内置终端,立刻执行node -v—— 这次的结果才代表它真能调用 - 若仍失败:Windows 用户检查安装时是否勾选了 Add to PATH;macOS/Linux 用户确认
source ~/.zshrc(或~/.bash_profile)已写入 shell 配置,且新终端已加载
launch.json 里 program 字段写成绝对路径或固定文件名
VSCode 自动生成的 launch.json 默认是 "program": "${workspaceFolder}/app.js",一旦你换文件名(比如改成 server.js),F5 就直接报错“Cannot find file”。这不是配置错了,是路径没动态适配。
- 日常单文件调试,直接设为
"program": "${file}"—— 表示“运行当前打开的 JS 文件”,不用改来改去 - 项目有明确入口(如
index.js),可设为"program": "${workspaceFolder}/index.js",但务必确保该文件存在 - 改完
launch.json后,别忘了保存文件(Ctrl+S),VSCode 不会自动保存未保存的脚本就启动调试
装了 Node.js 插件却还是不能右键 Run Code
像 Node.js Extension Pack 或 Debugger for Node.js 这类插件,只提供语法高亮、断点支持、代码片段,**不包含 Node.js 运行时本身**。它们是“遥控器”,不是“电视机”。
- 删掉这些插件 —— VSCode 自带 Node.js 调试支持,装了反而可能冲突
- 验证是否真有运行时:在 VSCode 终端里执行
node app.js(哪怕只是console.log('ok')),能输出才算通 - 如果右键 Run Code 报
Cannot find module 'http'或ReferenceError: require is not defined,100% 是没装 Node.js 或 PATH 没生效,跟插件无关
npm install 卡住、全局工具(如 nodemon)在 VSCode 里用不了
国内直连 npm 官方 registry 经常超时,且全局模块默认装在系统盘(如 C:\Users\XXX\AppData\Roaming\npm),容易占满空间或权限不足。
- 换淘宝镜像:
npm config set registry https://registry.npmmirror.com - 改全局安装路径(例如 D 盘):
npm config set prefix "D:\npm-global",再把该路径加进系统PATH - 验证配置:
npm config get prefix和npm config get registry应输出对应值 - 重装全局工具:
npm install -g nodemon,之后就能在任意目录用nodemon app.js - 如果系统终端能用
nodemon,但 VSCode 里提示command not found,大概率是 VSCode 终端没加载 shell 配置,重启 VSCode 或手动执行source ~/.zshrc更直接
最易被忽略的一点:VSCode 的终端是否真的继承了你 shell 里已生效的 npm 配置和 PATH。很多人改完环境变量后只重启终端,却没关掉 VSCode 进程,结果调试器始终找不到 node —— 它根本没机会读到新配置。











