skipFiles是字符串数组形式的路径白名单过滤器,需用绝对路径glob匹配,如["node_modules/","/","*/.d.ts"];写错格式、路径或范围会导致调试失效,且修改后必须重启调试会话。

直接在 launch.json 里配 skipFiles,但必须写对格式、路径和范围——写宽了你根本进不去想调试的包,写窄了还是天天卡在 node_modules 里。
skipFiles 配置必须是字符串数组,且路径要匹配实际加载路径
skipFiles 不是开关,是路径白名单过滤器。VSCode 按照文件的**绝对路径**做 glob 匹配,所以:
- ✅ 正确写法:
"skipFiles": ["node_modules/**", "/**", "**/*.d.ts"] - ❌ 错误写法:
"skipFiles": "node_modules/**"(不是数组)、"skipFiles": ["./node_modules/**"](带./前缀不匹配) - ⚠️ 注意:
**/node_modules/**在部分 VSCode 版本中不稳定,推荐用node_modules/**开头(不加**/) - 如果项目用了 pnpm,
node_modules下是符号链接,但skipFiles仍按解析后的路径字符串匹配,不用额外处理
跳过所有 node_modules 会把你真正想调试的包也绕过去
很多人一上来就写 "node_modules/**",结果 lodash、axios 全被跳过——这不是“排除干扰”,是“自断经脉”。关键要分清场景:
- 只想躲开内置模块(如
fs、events)?用"就够了/**" - 想保留某个包(比如
axios)可调试,只跳过其他无关依赖?别碰skipFiles,改用smartStep: true+ 手动F10跳过,或在断点上设条件:!fileName.includes("node_modules") - 确定某几个包(如
webpack、babel-core)纯属构建时干扰?单独列:"node_modules/webpack/**", "node_modules/babel-core/**"
改完 launch.json 必须重启调试会话,否则配置不生效
VSCode 不会热重载调试配置。常见失效原因:
- 改完
launch.json后没点 Stop → Start Debugging,只是点了 Restart Session - 当前选中的调试配置名和你编辑的不一致(比如有多个
configurations,但左上角选的是Attach to Process) - 断点本身打在
node_modules源码里(比如你手动在lodash/index.js点了断点)——skipFiles只屏蔽“自动进入”,不取消你明确设置的断点 - 不确定路径是否匹配?在可疑文件里加一句
console.log(__filename),看打印出的绝对路径,再比对skipFiles规则
最易被忽略的一点:skipFiles 和 resolveSourceMapLocations 是两套逻辑,但会互相影响。如果你同时设置了 "resolveSourceMapLocations": ["!**/node_modules/**"],那即使 skipFiles 没写错,source map 加载失败也会导致调试行为异常——这种组合问题,得一起查。











