vscode终端报node/npm command not found,因未加载shell配置;macos/linux需检查~/.zshrc并从终端启动code .,windows需统一powershell环境;npm install前须先npm init -y生成package.json;launch.json的program字段须填正确js路径;express断点不触发应先验证请求是否到达入口。

node -v 和 npm -v 报 command not found 怎么办
VSCode 内置终端里执行 node -v 或 npm -v 报错,说明 Node.js 根本没进 PATH,不是“装了就行”,而是 VSCode 启动时没加载你的 shell 配置。
- macOS/Linux 用户:检查
~/.zshrc(或~/.bash_profile)是否包含export PATH="$HOME/.nvm/versions/node/v18.17.0/bin:$PATH"类似的行,并确认 VSCode 是从终端启动的(比如在终端里执行code .),否则它会用系统默认 shell,不读你的配置 - Windows 用户:别混用 PowerShell 和 CMD;统一在 Windows Terminal 里用 PowerShell 启动 VSCode,并在 VSCode 设置里把
terminal.integrated.defaultProfile.windows设为powershell - nvm/fnm 用户:确保
nvm use 18.17.0在终端里成功执行过,再开 VSCode;否则它可能默认用系统自带的旧版 Node,甚至没有
npm install express 后 require('express') 报错
这不是 Express 问题,是项目上下文缺失——require 找不到模块,因为没 package.json,npm 就不会把依赖装到当前目录的 node_modules 里。
- 必须先运行
npm init -y,生成package.json;哪怕只是写个app.js,这步不能跳 -
npm install express必须在有package.json的目录下执行;否则它可能装到全局(-g)或报错 - 验证方式:执行
ls node_modules/express(mac/Linux)或dir node_modules\express(Windows),能看到目录才说明装对了
launch.json 的 program 字段填什么才有效
VSCode 调试器只认能被 node 直接执行的 JS 文件路径,填错就启动失败或断点不触发。
- 普通 CommonJS 项目(
app.js):program 填"${workspaceFolder}/app.js",别加.ts、.mjs或src/前缀 - TypeScript 项目:要么编译后调试(
program指向dist/app.js,且tsconfig.json开启"sourceMap": true),要么用runtimeExecutable: "npx"+runtimeArgs: ["ts-node", "--project", "./tsconfig.json"]+args: ["./src/app.ts"] - ESM 项目(
package.json里有"type": "module"):Node ≥ 18.17 才支持直接跑.mjs,program 可填"${workspaceFolder}/app.mjs",但别手动加--loader参数,VSCode 会自己注入--inspect
Express 路由断点不触发,怎么快速定位
不是调试器坏了,是请求压根没走到你设断点的地方。先确认请求是否进入 Express 入口,再查中间件链是否提前终结。
- 在第一个
app.use()里加日志:app.use((req, res, next) => { console.log('request arrived'); next(); }),然后用curl -v http://localhost:3000/测试;没日志说明连 Express 都没收到请求(端口错、代理挡了、服务根本没起来) - 常见拦截点:
app.use(express.json())因 Content-Type 错或 body 太大静默失败;res.status(401).end()提前结束响应;next('route')跳过后续路由 - 静态资源(如
public/)和路由共存时,确保app.use(express.static('public'))在所有app.get()之前,否则静态文件可能被路由规则吞掉
node_modules 路径没对上、launch.json 指向了不存在的文件、或者请求根本没发到那个端口——先盯住终端输出和 curl 返回,比反复改代码更省时间。











