files.exclude路径写错会导致文件树消失;它按工作区根目录匹配,非当前文件夹;正则不被原生支持;search.exclude仅影响搜索,不影响侧边栏显示。

files.exclude 里写错路径会导致整个文件树消失
VSCode 的 files.exclude 是全局过滤,不是“隐藏”,一旦匹配规则写得太宽(比如用了 ** 却没限定层级),可能让整个工作区看起来空空如也——连 src 文件夹都看不见。这不是崩溃,是被静默过滤了。
- 路径是相对于工作区根目录的,不是相对于当前文件夹;
node_modules就写"node_modules": true,别加./或**/ - 想只排除顶层
node_modules,别用"**/node_modules": true——它会递归匹配子目录里的同名文件夹,容易误杀 - 如果用了正则式(比如通过扩展支持),原生
files.exclude不认,只会当字符串字面量处理,白写了
search.exclude 和 files.exclude 别混着用
search.exclude 只影响 Ctrl+Shift+F 的搜索结果,不影响资源管理器显示;files.exclude 才真正让文件夹从侧边栏消失。很多人想“搜的时候跳过 node_modules”,却去改 files.exclude,结果文件树没了,还纳闷为啥搜索变快了——其实根本没生效。
- 日常开发建议:只设
files.exclude排除node_modules、dist、.git等大体积目录 - 需要搜索时临时跳过某些目录?用搜索框右上角的
files to exclude输入框,填node_modules/**更安全 -
search.exclude的值会继承自files.exclude,但反向不成立——改了search.exclude不会影响侧边栏
工作区设置比用户设置更优先,且支持按语言细化
全局用户设置(settings.json)里的 files.exclude 会被工作区设置覆盖。更重要的是:VSCode 支持在工作区设置里按语言加过滤,比如只对 JavaScript 项目隐藏 lib 目录。
- 工作区设置路径是
.vscode/settings.json,内容直接写进"files.exclude"对象即可 - 想对某类文件做语言专属排除?用
"[javascript]": { "files.exclude": { "lib/**": true } } - 注意:语言标识符要小写,
[TypeScript]是错的,得写[typescript] - 如果同时在用户级和工作区级设置了同一 key,工作区级生效,但不会合并——后者完全覆盖前者
重启 VSCode 后 node_modules 还在?检查是否被其他扩展接管
有些插件(比如 GitLens、ESLint 扩展)会自己读取文件系统,绕过 files.exclude 规则,导致你明明排除了 node_modules,它还是出现在某些视图里(比如 Git 变更列表、问题面板)。这不是设置失效,是别的地方在“主动拉取”。
- 先关掉所有非必要扩展,只留核心功能,再测试
files.exclude是否起效 - GitLens 默认会显示
node_modules下的变更,需手动关掉:gitlens.gitExplorer.files.exclude设为true - ESLint 扩展如果配置了
eslint.workingDirectories,它可能把node_modules当作工作目录之一,从而无视排除规则


















