断点忽略规则只能写在项目根目录下的.vscode/launch.json中,是vscode node.js调试唯一生效位置;必须使用node或pwa-node调试器类型,配置skipfiles(字符串数组,按绝对路径glob匹配)或smartstep(布尔值),其他配置如settings.json或debug.ignore均无效。

断点忽略规则写在哪?launch.json 是唯一入口
VSCode 的 Node.js 断点忽略逻辑只在调试配置中生效,不通过设置或插件控制。必须编辑项目根目录下的 .vscode/launch.json,且仅当使用 node 类型的调试器(如 type: "pwa-node" 或旧版 "node")时才支持 skipFiles 或 smartStep 等规则。
常见错误是把忽略规则写进 settings.json 或试图用 debug.ignore 这类不存在的配置项——这些完全无效。
-
skipFiles:数组形式,匹配需跳过的文件路径(支持 glob,如"**/node_modules/**"、"<code>internal/**/*.js") -
smartStep:布尔值,开启后自动跳过未有源码映射或无调试符号的代码(对node_modules内部调用很实用) -
trace设为true可在调试控制台看到 VSCode 实际跳过了哪些文件,用于验证规则是否生效
skipFiles 的路径匹配容易错在哪?
路径匹配基于调试器解析后的绝对路径,不是你编辑器里看到的相对路径。比如你在项目里 import 了 lodash,实际停在 /node_modules/lodash/lodash.js,那 skipFiles 必须匹配这个运行时路径,而不是 ./node_modules/...。
- 推荐写法:
"**/node_modules/**"(注意双星号开头,覆盖所有嵌套层级) - 避免写成:
"node_modules/**"(漏掉从根目录出发的绝对路径) - 若要忽略特定包:
"**/node_modules/react-dom/**"或"**/node_modules/.pnpm/**"(pnpm 场景下路径不同) - Windows 用户注意:
skipFiles中路径分隔符统一用/,VSCode 内部会自动转换,不要用\
smartStep 开启后为什么还停在 node_modules?
smartStep 不是“忽略”,而是“智能单步跳过”——它依赖 source map 和可调试性判断。如果某 node_modules 包恰好带了 sourceMap 且你本地有对应 .map 文件,VSCode 就认为“可调试”,不会跳过。
- 典型场景:你装了
@vue/runtime-core,它自带sourceMap,即使开了smartStep,F10 单步仍可能进入其源码 - 此时必须配合
skipFiles显式排除:"**/node_modules/@vue/**" -
smartStep对 CommonJS 模块(尤其无sourceMap的)效果最好;ESM + 构建产物(如 Vite 打包后)可能失效
调试多进程(如 cluster 或 worker_threads)时忽略规则失效?
每个子进程(child_process.fork、cluster.fork、Worker)启动时都独立加载调试器,但它们**不继承主进程的 launch.json 配置**。这意味着子进程的断点忽略规则默认为空。
- 解决方法:在
launch.json中启用attach模式,配合processId或port手动附加到子进程,并为其单独配置skipFiles - 更稳妥做法:改用
autoAttach(VSCode 1.84+),在settings.json中设"debug.node.autoAttach": "on",再结合全局skipFiles规则(该规则对 auto-attached 进程也生效) - 注意:
autoAttach下skipFiles必须写在用户级或工作区级settings.json的debug.javascript.skipFiles字段里,而非launch.json
真正麻烦的是混合调试场景:主进程用 launch,子进程用 attach,两套规则要分别维护。别指望一次配置全覆盖——Node.js 多进程调试的忽略逻辑,本质上就是分散管理的。











