因为多根工作区中子文件夹的.vscode/settings.json仅作用于该文件夹,不自动提升为工作区级配置;files.exclude必须写在.code-workspace的settings字段中,且路径需相对于各folder.path,如"**/node_modules":true才对所有根目录生效。

为什么 settings.json 里的 "files.exclude" 在多根工作区里不生效?
因为 VSCode 的多根工作区(workspace)会优先合并各文件夹的根级 .vscode/settings.json,但 "files.exclude" 是「用户级」或「工作区级」才真正起作用的配置项——单个项目文件夹下的 .vscode/settings.json 默认只影响该文件夹自身,**不会自动提升为工作区作用域**。常见表现是:你在某个子文件夹里写了 "files.exclude": { "node_modules": true },但整个工作区仍显示 node_modules。
- 必须把配置写在最外层的
.code-workspace文件中,而非子文件夹的.vscode/settings.json -
"files.exclude"不支持通配符路径跨文件夹匹配(比如"*/node_modules"在工作区级无效),只能写相对当前工作区根的路径 - 如果用了
"**/node_modules",它只对当前工作区根下的所有子目录生效,不穿透到其他根文件夹(多根时每个根是独立路径上下文)
如何在 .code-workspace 中正确配置跨项目隐藏?
打开工作区文件(如 my-project.code-workspace),编辑其 "settings" 字段。这里才是多根工作区的「统一配置入口」。
- 用
"files.exclude"配置全局隐藏规则,路径以每个「folder」的"path"为基准,例如某 folder 路径是"./backend",那么要隐藏其dist目录就得写"backend/dist": true - 若想统一隐藏所有根目录下的
node_modules,需显式列出:"**/node_modules": true—— 注意开头的**/表示任意深度,且该规则对所有根文件夹都有效 - 避免使用绝对路径(如
/Users/xxx/project/node_modules),VSCode 不解析绝对路径的files.exclude
{
"folders": [
{ "path": "frontend" },
{ "path": "backend" }
],
"settings": {
"files.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/.git": false
}
}
}
"files.exclude" 和 "search.exclude" 有什么区别?
二者控制不同场景的「隐藏」:files.exclude 影响资源管理器(Explorer)和文件打开面板;search.exclude 只影响全局搜索(Ctrl+Shift+F)是否扫描这些路径。
- 如果只想让
node_modules不出现在侧边栏,但搜索时仍要查里面的内容(比如调试第三方库源码),就只配"files.exclude",别动"search.exclude" - 反之,若侧边栏需要看到
dist(方便手动点击),但搜索时不想污染结果,就单独设"search.exclude": { "**/dist": true } - 两者默认值不同:
files.exclude默认包含"**/node_modules",而search.exclude默认为空对象,不继承files.exclude
为什么改了 .code-workspace 还没立刻隐藏?
VSCode 不会自动重载工作区配置来刷新 Explorer 视图,尤其当文件夹已打开过、缓存了旧状态时。
- 保存
.code-workspace后,执行命令Developer: Reload Window(Ctrl+Shift+P 输入后回车) - 或者关闭并重新用
File > Open Workspace From File...打开该.code-workspace - 注意:如果某个文件夹被单独打开过(非通过工作区),它的
.vscode/settings.json会覆盖工作区设置,导致隐藏失效 —— 必须确保始终通过.code-workspace启动
多根工作区的隐藏逻辑本质是路径前缀匹配,不是文件系统监听。一旦路径规则写错(比如漏掉 **/ 或拼错文件夹名),就不会触发隐藏,而且没有任何错误提示 —— 这是最容易卡住的地方。











