launch.json中type字段必须为pwa-chrome而非chrome,因vs code 1.8x+已弃用chrome类型,仅pwa-chrome支持esm、source map v3等现代特性,否则断点失效或报错。

launch.json 中 type 字段必须用 pwa-chrome,不是 chrome
VSCode 从 1.8x 版本起已将旧版 chrome 调试器整合进 pwa-chrome,继续用 "type": "chrome" 会导致断点不触发、source map 失效或直接报错 Cannot connect to runtime process。
-
pwa-chrome支持现代 Web 技术(ESM、import maps、Web Workers),而旧chrome类型仅兼容传统 script 标签加载方式 - 如果你的项目用了 Vite、Webpack 5+ 或 React/Vue CLI,默认构建产物依赖 sourcemap 的路径映射逻辑,只有
pwa-chrome能正确解析sourceMapPathOverrides - 检查已安装插件:确保启用的是
JavaScript Debugger (Nightly)(Microsoft 官方),而非已废弃的独立Debugger for Chrome
webRoot 和 sourceMapPathOverrides 必须匹配实际构建路径
断点“点了没反应”或“停在 bundle.js 里而不是 .ts/.jsx 文件”,90% 是路径映射没对上。VSCode 不会自动猜你源码在哪,它只认配置。
-
webRoot应指向浏览器实际加载 HTML 的根目录,通常是${workspaceFolder};但如果开发服务器把dist/或public/当 web root,就得写成${workspaceFolder}/dist -
sourceMapPathOverrides是关键补救项:Webpack 默认生成的 sourcemap 路径是webpack:///./src/App.tsx,而你的文件实际在${workspaceFolder}/src/App.tsx,所以要写"webpack:///./src/*": "${webRoot}/src/*" - Vite 项目常用
"*": "${webRoot}/*"简单覆盖;但若用了base配置(如base: "/my-app/"),就得加前缀映射,否则断点全失效
调试时 Chrome 必须关闭所有其他实例
VSCode 启动 pwa-chrome 时会尝试独占远程调试端口(默认 9222)。如果系统里已有 Chrome 在运行(哪怕只是后台进程),launch 模式会卡住或报错 Unable to attach to browser。
- 最简单办法:任务管理器里结束所有
chrome.exe进程(Windows)或执行pkill -f "Chrome"(macOS/Linux) - 不想关掉日常 Chrome?改用
attach模式:先手动打开 Chrome,加启动参数--remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug,再在 launch.json 里设"request": "attach",并删掉url字段 - 注意:
--user-data-dir必须指定一个干净目录,否则会复用已有 profile 导致端口冲突或扩展干扰调试
HTTPS 页面或本地文件协议下调试失败怎么办
访问 https://localhost:3000 或直接双击打开 file:///path/to/index.html 时,断点常失效,控制台报 SecurityError: Failed to construct 'Worker' 或直接跳过断点。
- 开发环境建议统一用
http://localhost:3000——多数前端工具链(Vite、Create React App)默认支持且无证书限制 - 若必须调试 HTTPS,需在 launch.json 加
"webRoot": "${workspaceFolder}"和"ignoreHttpsErrors": true(放在配置顶层,不是env里) - 调试
file://协议页面:Chrome 默认禁用 JS 调试,得加启动参数--unsafely-treat-insecure-origin-as-secure="file:///" --user-data-dir=/tmp/chrome-file,且仅限本地测试,不可用于生产
chrome 类型还能用。调通前先确认这三件事:VSCode 用的是 pwa-chrome,Chrome 没其他实例在跑,sourceMapPathOverrides 里的路径能手工拼出真实文件位置。











