设置cross-env后VS Code调试器无法正常工作
解决VS Code调试器配合cross-env运行测试脚本失效的问题
你的问题出在cross-env会创建独立子进程执行后续命令,而VS Code默认调试器只会附加到npm启动的主进程(也就是cross-env进程),不会自动跟进到它启动的mocha子进程,所以断点不会触发。
下面是几种可行的解决办法:
方法1:移除cross-env,在VS Code调试配置里设置环境变量
既然cross-env的作用是跨平台设置环境变量,直接把环境变量移到调试配置里就行,不需要依赖cross-env:
- 先修改package.json的test脚本,去掉cross-env部分:
{ "test": "mocha test/**/*.{spec,test}.[jt]s --require test/prelude.js" }
- 在VS Code的
.vscode/launch.json里添加调试配置,直接设置需要的环境变量:
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Run Tests", "program": "${workspaceFolder}/node_modules/mocha/bin/mocha.js", "args": [ "test/**/*.{spec,test}.[jt]s", "--require", "test/prelude.js" ], "env": { "NODE_OPTIONS": "--experimental-specifier-resolution=node", "NODE_NO_WARNINGS": "1" }, "console": "integratedTerminal", "internalConsoleOptions": "neverOpen" } ] }
这样直接启动mocha进程,调试器能正常附加,断点会生效。
方法2:保留cross-env,让调试器跟踪子进程
如果一定要用cross-env,可以修改调试配置,让VS Code调试器自动跟踪子进程:
- 保持package.json的test脚本不变,然后在
.vscode/launch.json里添加如下配置:
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Run Tests with cross-env", "runtimeExecutable": "npm", "runtimeArgs": [ "run", "test" ], "env": {}, "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "autoAttachChildProcesses": true } ] }
关键是开启autoAttachChildProcesses: true,让调试器自动附加到cross-env启动的mocha子进程。
方法3:给mocha添加调试参数,手动连接
如果上面两种方法都不行,还可以在test脚本里给mocha加上调试端口参数,然后让VS Code调试器连接这个端口:
- 修改package.json的test脚本:
{ "test": "cross-env NODE_OPTIONS='--experimental-specifier-resolution=node --inspect=9229' NODE_NO_WARNINGS=1 mocha test/**/*.{spec,test}.[jt]s --require test/prelude.js" }
这里添加了--inspect=9229,让mocha进程在9229端口开启调试模式。
- 在
.vscode/launch.json里添加附加调试配置:
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "attach", "name": "Attach to Test Process", "port": 9229, "restart": true } ] }
启动npm test命令后,再启动这个附加调试配置,就能连接到mocha进程进行调试。
内容的提问来源于stack exchange,提问作者nopeless
相关产品推荐
相关产品推荐

