skipFiles是绝对路径白名单而非黑名单,必须为字符串数组,如["node_modules/", "/*.d.ts"];写错格式、路径或与resolveSourceMapLocations冲突均导致失效,且修改后须重启调试会话。

skipFiles 必须是绝对路径白名单,不是黑名单
VSCode 的 skipFiles 不是“跳过这些”,而是“只允许进入这些”——它按文件**绝对路径**做 glob 匹配,匹配不上的全被跳过。写成 "skipFiles": "node_modules/**"(字符串非数组)或 "./node_modules/**"(带点斜杠)直接失效,调试器会退回到默认行为:F11 疯狂往 lodash、axios 里钻。
正确写法必须是数组,且路径前缀不加 ./ 或 **/:
-
"skipFiles": ["<node_internals>/**", "node_modules/**", "**/*.d.ts"]</node_internals>—— 安全、兼容性好 -
"skipFiles": ["node_modules/webpack/**", "node_modules/babel-core/**"]—— 精准屏蔽构建依赖,保留 axios、zod 等可调试 - 想保留某个包?别动
skipFiles,改用断点条件:!fileName.includes("node_modules") || fileName.includes("my-pkg")
改完 launch.json 必须重启调试会话,热重载不生效
VSCode 调试配置不会监听 launch.json 变更。常见失效场景:
- 点了 Restart Session,但没先 Stop → Start Debugging
- 当前选中的配置名和你编辑的
configurations不一致(比如左上角显示的是Attach to Process) - 断点本身打在
node_modules源码里——skipFiles只影响自动 Step Into,不取消手动设置的断点
验证是否生效?在疑似被跳过的文件里加一行 console.log(__filename),看输出的绝对路径,再比对 skipFiles 规则是否能 match 上。
justMyCode: false 才能真正步入第三方包源码
如果你目标是调试某个 npm 包(比如 zod/src),但 F11 总是跳过,大概率是 justMyCode 拦着了。它默认为 true,会强制跳过所有非工作区路径的代码,哪怕 sourceMaps 和 resolveSourceMapLocations 全配对了也没用。
必须显式关掉:
"justMyCode": false"sourceMaps": true- 若包是 ESM + TS,检查
resolveSourceMapLocations是否指向正确的../node_modules/**(注意:是相对于生成后的.js文件位置)
skipFiles 和 resolveSourceMapLocations 会互相干扰
这两个配置看似独立,实则联动。例如你设了:
"resolveSourceMapLocations": ["!**/node_modules/**"]
那即使 skipFiles 写对了,source map 解析阶段就已把 node_modules 排除,后续调试器根本看不到那些文件的映射关系——skipFiles 再努力也无从匹配。
所以:要调试第三方包,这两项得协同;要彻底跳过,就得都配窄。最易被忽略的是:你改的可能只是其中一项,另一项还在暗中拖后腿。


















