必须用"**/node_modules"而非"node_modules",因为VSCode的search.exclude使用glob匹配,前者递归匹配所有嵌套层级(如packages/foo/node_modules),后者仅匹配根目录;同时search.exclude只影响全局搜索,files.exclude仅控制侧边栏显示。

VSCode 在运行 Vue/React 项目时,只要一按 Ctrl+Shift+F,node_modules 就会被完整扫描——这不是 bug,是默认行为;不配 search.exclude,它真会打开上万个文件逐行搜。
为什么 search.exclude 必须用 "**/node_modules" 而不是 "node_modules"
VSCode 的 search.exclude 使用 glob 模式匹配路径,不是简单字符串比对。node_modules 只能匹配项目根目录下的同名文件夹,但现代前端项目里,node_modules 可能出现在 packages/foo/node_modules、examples/bar/node_modules 等任意嵌套层级。
-
"**/node_modules"表示“任意深度路径下名为node_modules的目录”,这是唯一能覆盖 monorepo 或多包结构的写法 -
"node_modules/**"是反向写法,VSCode 不识别,配置后完全无效 - 如果项目用了 pnpm,还会出现
.pnpm链接目录,建议一并加上"**/.pnpm"
search.exclude 和 files.exclude 混用时的实际影响
这两个配置都用 glob,但作用完全不同,改错地方就白忙活:
-
search.exclude:只影响Ctrl+Shift+F全局搜索,不影响侧边栏显示 -
files.exclude:只控制资源管理器里是否显示文件/文件夹,不影响搜索范围 - 常见错误:把
node_modules加到files.exclude里,以为搜索也跳过了——结果搜索依然卡顿,因为search.exclude还是空的 - 建议统一在工作区
.vscode/settings.json中同时配两者,避免团队成员看到混乱的侧边栏
改完 search.exclude 为什么还是搜到 node_modules 里的内容
不是配置没生效,而是 VSCode 搜索有缓存和优先级机制:
立即学习“前端免费学习笔记(深入)”;
- 必须执行
Ctrl+Shift+P→ 输入Developer: Reload Window,否则旧索引还在跑 - 检查有没有插件干扰,比如某些「增强搜索」类扩展(如
ripgrep自定义配置)会绕过原生search.exclude - 确认没有更高优先级的设置覆盖:命令面板输入
Preferences: Open Settings (JSON),看当前生效的是用户级还是工作区级配置 - 终端手动验证:在项目根目录运行
rg "your-keyword" --type=js --glob="!**/node_modules",如果这条命令不报错且结果干净,说明 VSCode 底层 ripgrep 已就绪
真正容易被忽略的点是:monorepo 项目中,node_modules 可能分散在多个子包里,单靠一条 "**/node_modules" 不够,还得加 "**/lib/node_modules" 或 "**/packages/*/node_modules"——这取决于你实际依赖管理方式,不能只抄模板。


















