vscode 唯一官方支持的多项目管理方式是显式创建并保存 .code-workspace 文件:空窗口下执行 workspaces: create workspace,多选项目根目录后保存为 .code-workspace,路径建议用相对路径;其 settings 仅覆盖显式声明字段,launch.json 必须置于工作区根目录且配置 cwd 和 envfile 路径变量,切换工作区前需手动关闭标签页以防上下文污染。

直接用 .code-workspace 文件组织多个项目,是 VSCode 唯一官方支持、可持久化、可协作的多项目管理方式;其他做法(比如反复打开文件夹、拖拽进窗口、开多个窗口)都会丢失跨项目跳转、统一搜索、共享调试配置等关键能力。
怎么创建有效的 .code-workspace 文件
不能靠“Add Folder to Workspace”临时拼凑后就关掉——那样不会生成可复用的配置文件。必须显式保存为 .code-workspace 才能固化路径和设置:
- 先确保 VS Code 是空窗口(没打开任何文件夹),再按
Ctrl+Shift+P输入Workspaces: Create Workspace回车 - 在弹出的文件选择框中,按住
Ctrl(Windows/Linux)或Cmd(macOS)多选多个项目根目录(如./backend、./frontend) - 保存为
my-team.code-workspace,文件会自动生成标准 JSON 结构,包含"folders"和可选的"settings"字段 - 路径建议用相对路径(如
"path": "../backend"),但要确保该文件放在团队约定的统一父目录下;绝对路径虽稳定,但换机器就得手动改
.code-workspace 里的 settings 为什么有时不生效
工作区级 settings 确实优先级最高,但只覆盖你**明确写进去的字段**,不会继承或补全其他设置:
- 如果某个子项目(如
backend/)自己有.vscode/settings.json,它里面的python.defaultInterpreterPath仍会生效——而你在.code-workspace中没写这一项,就不会被覆盖 -
"files.exclude"这类设置一旦在.code-workspace中声明,就会作用于所有根文件夹;但如果漏写了"eslint.enable",那各子项目自己的.vscode/settings.json依然管用 - 保存后,
.code-workspace中的settings会自动格式化(注释清空、缩进变 2 空格),别指望保留手写注释
调试多个服务时,launch.json 必须放对位置
VSCode 只读取工作区根目录(即 .code-workspace 文件所在目录)下的 .vscode/launch.json,不会扫描各个子文件夹里的同名文件:
- 把
.vscode/launch.json放在和my-team.code-workspace同级的目录里,不是放在backend/或frontend/下面 - 每个
configuration必须设"cwd": "${workspaceFolder:backend}",其中backend是你在folders数组里给该路径起的name(不写name默认用文件夹名) - 环境变量文件要用
"envFile": "${workspaceFolder:frontend}/.env.local",不能写相对路径如"./.env.local",否则找不到 - 想一键启动前后端,用
"compound"配置,而不是手动点两个 ▶️
切换工作区时,旧标签页不会自动清理
这是最常被忽略的上下文污染源:从 frontend.code-workspace 切到 fullstack.code-workspace 后,原来打开的 App.tsx 标签页还在,但 ESLint 规则、Git 状态、甚至终端命令补全都可能错乱:
- 切换前手动按
Ctrl+K W关闭全部编辑器标签页,或启用"workbench.editor.closeOnFileDelete": true减少残留 - 不要依赖“最近打开”菜单直接切——它不校验当前工作区是否还包含那个文件夹,容易加载失效上下文
- 终端默认工作目录始终是
folders数组里的第一个路径,右键终端标签页 →Change Default Directory才能切到别的子项目











