files.exclude仅控制资源管理器显示,要隐藏所有层级node_modules需同时配置"node_modules": true和"**/node_modules": true,二者缺一不可。

files.exclude 必须同时配根目录和子目录的 node_modules
只写 "node_modules": true 只能隐藏项目根下的 node_modules,但像 packages/foo/node_modules 这类嵌套依赖依然会显示。VSCode 的 glob 匹配不自动递归,必须显式声明:"**/node_modules": true 才覆盖所有层级。
更稳妥的做法是两者都加,避免漏掉任何一种结构:
-
"node_modules": true—— 拦住根目录直接子项 -
"**/node_modules": true—— 拦住任意深度的同名文件夹
注意:"**/node_modules/**" 和 "**/node_modules" 效果几乎一样,但后者更轻量,VSCode 渲染资源管理器时路径匹配开销略小。
锁定文件(.git、.DS_Store、.env)要小心默认规则冲突
VSCode 默认内置了 "**/.*": true,它会把所有点开头的文件(包括 .git、.env、.DS_Store)全干掉。如果你只想隐藏部分,又想保留 .env 或 .gitignore,就不能靠删整条默认规则——那会把所有点文件都放出来。
正确做法是:在 files.exclude 里单独写精确项,覆盖默认行为:
-
"**/.DS_Store": true—— macOS 系统垃圾 -
"**/.git/**": true—— 完整隐藏 Git 目录(含内部对象) -
"**/.gitignore": false—— 显式放行,确保它可见(注意值是false)
⚠️ 别忘了:如果工作区已有 .vscode/settings.json,用户级设置里的 "**/.*": true 就完全不生效——优先级被覆盖了。
search.exclude 不同步 files.exclude 就等于白配
你把 node_modules 从资源管理器藏得干干净净,结果 Ctrl+Shift+F 搜个函数,还是卡在 node_modules 里转圈?这就是只动了 files.exclude,没碰 search.exclude。
二者完全独立,没有继承或联动关系。搜索性能差、结果杂乱,90% 是因为 search.exclude 没配或配错:
- 必须手动加同样的路径,比如
"**/node_modules": true -
search.exclude支持更细粒度排除,如"**/*.min.js": true,但files.exclude不推荐这么用(影响文件树渲染效率) - 临时跳过某目录搜索?直接在搜索框右上角输入
!node_modules,比改配置更快,还不留痕
工作区配置优先级高,但容易被插件绕过
把 files.exclude 写进项目根下的 .vscode/settings.json,是团队协作最稳的方式。它优先于用户级设置,且可提交到 Git 统一管理。
但要注意:某些扩展(比如 GitLens、ESLint、Prettier)会主动读取被隐藏的文件来提供功能,导致你在「源代码管理」视图或「问题面板」里仍看到 node_modules 下的文件——这不是配置失效,是扩展故意绕过了 files.exclude 的视觉过滤。
验证是否真生效?关掉所有非必要扩展,再看资源管理器。如果还显示,就是配置错了;如果消失了,那就是某个扩展在“偷偷展示”。











