VSCode调试React项目时断点不生效怎么办?
我在用VSCode调试本地的React项目,已经装了Debugger for Chrome插件,也配好了launch.json,但打的断点总是变成灰色,提示“未验证的断点”。试过重启编辑器、重新编译项目都不行。
我的launch.json配置是这样的:
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}/src"
}
]
}
项目是用Create React App创建的,开发服务器正常运行在3000端口。是不是webRoot路径配错了?还是需要额外的sourceMap配置?
你的launch.json配置有几个问题需要调整:
第一个问题是Chrome的启动方式。用"launch"模式的话,需要让VSCode帮你启动Chrome,并且要加上远程调试端口。改成这样:
注意webRoot我改成了${workspaceFolder}而不是${workspaceFolder}/src,因为CRA编译后的sourceMap路径是相对于项目根目录的。
第二个问题是sourceMap。你需要确认一下package.json里有没有配置GENERATE_SOURCEMAP=true(或者干脆不写,默认是true)。如果编译时没生成sourcemap,断点肯定打不上。
还有个更省心的做法——用"attach"模式替代"launch":
操作流程是:先手动打开Chrome(命令加上--remote-debugging-port=9222),然后在VSCode里按F5启动调试。
另外提醒一下,VSCode的Debugger for Chrome插件已经deprecated了,现在官方推荐用JS Debug Terminal或者直接用Edge浏览器的调试器,不过Chrome配置思路是一样的。
你先试试第一种launch方式的配置,把Chrome路径改成你本机实际的安装路径,应该就能正常断点了。
你的 webRoot 设置成了
${workspaceFolder}/src,但实际上应该是${workspaceFolder},也就是项目根目录。VSCode 需要从根目录去匹配 source map,而不是从 src 目录开始。我的做法是直接改成这样:
关键改动有两点。第一,webRoot 改成项目根目录。第二,加上 sourceMapPathOverrides 配置,因为 Create React App 用 webpack 打包后的 source map 路径是
webpack:///src/*这种格式,需要手动映射回本地的 src 目录。另外多说一句,Debugger for Chrome 这个插件已经废弃了,VSCode 现在内置了 JavaScript Debugger,建议把插件卸载掉,直接用内置的就行,体验更好。
改完配置记得重启一下调试,断点应该就能正常命中了。如果还不行,检查一下 CRA 项目有没有正常生成 source map,开发环境下默认是开启的,但如果你改过配置就得注意一下。