skipFiles是VSCode调试中按绝对路径glob匹配的白名单数组,必须写为["node_modules/**"]等正确格式,修改后需重启调试会话;写错格式、路径或范围会导致全放行或全屏蔽。

skipFiles 是唯一可控的路径白名单,不是开关,也不是黑名单;写错格式、路径或范围,调试器要么全放行、要么全屏蔽——它按文件**绝对路径**做 glob 匹配,且修改后必须重启调试会话才生效。
skipFiles 必须是数组,且路径不能带 ./ 前缀
VSCode 只认绝对路径匹配,./node_modules/** 这种相对写法会被完全忽略,不报错也不提示。常见错误包括:
-
"skipFiles": "node_modules/**"—— 不是数组,配置无效 -
"skipFiles": ["**/node_modules/**"]—— 在部分 VSCode 版本中不稳定,尤其 pnpm 或 monorepo 场景下易漏匹配 -
"skipFiles": ["node_modules/**"]—— ✅ 推荐写法,开头不加**/,但能覆盖绝大多数 node_modules 加载路径(V8 require 时解析出的绝对路径通常以/.../node_modules/...开头)
别一股脑跳过所有 node_modules,否则你真想调的包也进不去
很多人一上来就写 "node_modules/**",结果 axios、zod、pg 全被绕过——这不是“排除干扰”,是“拒绝调试”。关键要分清场景:
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
- 只想躲开内置模块(
fs、events、node:crypto)?用"<node_internals>/**"</node_internals>就够了 - 只想跳过构建工具类干扰(
webpack、babel-core、vite/dist)?单独列:"node_modules/webpack/**"、"node_modules/vite/dist/**" - 想保留某个包可调试(比如
my-utils),但跳过其余?别碰skipFiles,改用断点条件:!fileName.includes("node_modules") || fileName.includes("my-utils")
改完 launch.json 必须重启调试,不是刷新或重连
VSCode 不热重载调试配置。常见失效原因:
- 点了「Restart Session」但没先 Stop → Start Debugging,配置不加载
- 左上角选中的调试配置名和你编辑的
launch.json中configurations不一致 - 断点本身打在
node_modules源码里(比如手动在lodash/index.js点了断点)——skipFiles只影响自动进入(F11),不取消你明确设置的断点 - 不确定某文件是否被跳过?在它里面加
console.log(__filename),看输出的绝对路径,再比对skipFiles规则
最易被忽略的一点:skipFiles 和 resolveSourceMapLocations 是两套逻辑,但会互相影响。如果你同时设置了 "resolveSourceMapLocations": ["!**/node_modules/**"],那即使 skipFiles 写对了,source map 解析失败也可能导致断点悬空或跳转异常。

















