vscode中隐藏node_modules需配置files.exclude:在.vscode/settings.json中添加{"files.exclude":{"node_modules":true,"**/node_modules":true}},仅此即可生效。

VSCode 资源管理器里 node_modules 还在显示?改 files.exclude 就行
VSCode 默认不会自动隐藏 node_modules,哪怕你装了 ESLint 或 Prettier 插件也没用——这是编辑器层面的文件过滤逻辑,得手动配。关键不是“能不能”,而是“配在哪”和“怎么写才生效”。
最直接有效的方式是修改工作区或用户设置里的 files.exclude,它控制资源管理器(Explorer)中哪些路径不显示。
-
files.exclude是一个对象,键是 glob 模式(不是正则),值为true表示排除 - 推荐优先写在工作区设置(
.vscode/settings.json)里,避免影响其他项目 - 必须用双引号包裹键名,且路径开头不能带
/(否则匹配失败) - 如果用了符号链接(比如
pnpm link),仅排除node_modules可能不够,得加**/node_modules
{
"files.exclude": {
"node_modules": true,
"**/node_modules": true
}
}
为什么只写 "node_modules": true 有时不生效?
常见现象:根目录下的 node_modules 消失了,但子包里的(比如 packages/foo/node_modules)还在。这是因为 VSCode 默认只匹配一级路径,"node_modules" 只排除当前层级同名文件夹。
真正要递归隐藏所有嵌套的 node_modules,必须加上通配前缀 **/。但注意:**/node_modules 会匹配任意深度的同名目录,包括 src/lib/node_modules 这种极少见但合法的路径——如果你真有这种结构,得单独保留。
- 别用
**/node_modules/**—— 多余的/**会导致规则失效 - 不要写成
"./node_modules"或"/node_modules",前者被忽略,后者完全不匹配 - 如果项目用了 pnpm 的
node_modules/.pnpm结构,单靠排除node_modules已足够,不用额外处理子目录
和 search.exclude、files.watcherExclude 有什么区别?
这三个配置名字像,但作用完全不同,混用反而出问题:
-
files.exclude:只影响资源管理器显示(你要找的这个) -
search.exclude:控制全局搜索(Ctrl+Shift+F)是否扫描这些路径,不影响 Explorer -
files.watcherExclude:告诉 VSCode 别监听这些路径的文件变化,影响保存自动刷新、热重载响应速度,但也不影响显示
所以,只想让 node_modules 不出现在左侧栏,只动 files.exclude 就够了。其他两个配置留空或按需单独设,别一股脑全写一样的规则。
重启 VSCode 后还是没隐藏?检查这三件事
改完设置不生效,90% 是卡在这几个细节上:
- 确认改的是
.vscode/settings.json(工作区)或settings.json(用户级),而不是插件自己的配置页 - 检查 JSON 语法:有没有漏掉逗号、多写了逗号、引号用了中文标点
- 确认没有其他扩展(比如某些“文件管理器”类插件)覆盖了默认行为——临时禁用非必要插件试试
改完保存后,不需要重启 VSCode,资源管理器会几秒内自动刷新;如果没反应,可以右键 Explorer 空白处选 “Refresh” 手动触发一次。
复杂点在于:不同包管理器生成的 node_modules 结构略有差异,而 VSCode 的 glob 匹配对斜杠方向、大小写、隐藏属性都敏感。别指望一条规则适配所有项目,看到没隐藏,先看路径是否真叫 node_modules —— 有些 Rust + WebAssembly 项目会用 pkg,TypeScript monorepo 可能压根没它。











