正确姿势是打开.js文件后通过「运行和调试」→「创建launch.json」选择node.js,再将program改为"${file}"实现任意文件一键调试,并必须显式配置cwd和env以确保路径与环境一致。

直接生成 launch.json 的正确姿势
VSCode 不会自动为你生成适配当前 Node 版本或项目结构的调试配置,必须手动触发生成并立即修改关键字段。最可靠的方式是:打开一个 .js 文件(比如 test.js),点击左侧「运行和调试」图标 → 点击「创建 launch.json 文件」→ 选择「Node.js」环境。此时 VSCode 会在项目根目录下生成 .vscode/launch.json,但默认的 "program": "${workspaceFolder}/test.js" 是硬编码路径,无法复用。
必须改掉的 program 字段值
program 决定了调试时执行哪个文件。写死路径会导致每次换文件都要手动改配置,违背快速调试初衷。你应该把它改成:
"program": "${file}"
这个变量指向当前活动编辑器中打开的文件,无论你正在编辑 index.js、utils.test.js 还是 src/server.js,按 F5 都能直接调试它。注意:${file} 只在保存后生效——未保存的变更不会被调试器读取,终端可能仍运行旧逻辑。
- 如果项目有统一入口(如
bin/www),可改用"program": "${workspaceFolder}/bin/www" - 若需传参,补上
"args": ["--env=test"] - 避免用
${workspaceFolder}/test.js这类固定路径,除非你只测一个文件且永不新增
node 调试配置里容易被忽略的 cwd 和 env
很多测试失败不是代码问题,而是工作目录或环境变量没对齐。比如 require('./config') 在终端里能跑,但在调试中报错 Cannot find module './config',大概率是 cwd 没设对。
建议显式声明:
"cwd": "${workspaceFolder}",<br>"env": { "NODE_ENV": "test" }
-
cwd影响模块解析、fs.readFile相对路径、.env加载位置 -
env用于注入测试专用变量,比如关闭日志、启用内存 mock;设为null可清除某个继承来的环境变量 - 不写
cwd时,VSCode 默认使用打开文件所在目录,跨子目录调试时极易出错
测试专用配置建议加 request: attach 或 use nodemon
纯 launch 模式适合单次脚本,但真实测试常需监听文件变化或连接已启动进程。这时不要硬套默认配置:
- 想热重载测试文件?用
nodemon:把"type": "node"改成"runtimeExecutable": "nodemon",并确保已全局安装npm install -g nodemon - 想调试 Express/Koa 启动后的服务?改用
"request": "attach"+"port": 9229,并在启动命令加node --inspect-brk app.js - 单元测试(如 Jest/Mocha)不建议走
launch.json,应通过package.json脚本 + VSCode 的「运行任务」集成更稳
真正麻烦的从来不是生成配置,而是生成后没意识到 ${file} 和 cwd 的联动效应——它们共同决定了“你写的代码”和“调试器执行的代码”是不是同一份。











