.code-workspace文件仅存三类信息:项目路径(folders数组,含path/name)、共享settings配置、工作区级launch.json/tasks.json调试与任务配置;不保存会话状态。

`.code-workspace` 文件到底存了哪些东西
它只存三类信息:项目路径、共享设置、调试/任务配置。不存文件打开状态、光标位置、未保存的编辑内容——这些属于会话(session),关掉窗口就丢。
最核心的是 folders 数组,每个元素必须有 path 字段(绝对或相对路径),可选 name 字段用于标识子项目。没设 name 时,VS Code 默认用文件夹名,但后续所有 launch.json 或任务里引用都得按这个默认名来,容易出错。
-
path填相对路径(如"./backend")更利于团队协作,但要求所有人工作区文件和项目目录的相对关系一致 - 填环境变量路径(如
"${env:HOME}/dev/myapp/frontend")能跨平台适配,但 Windows 用户得确认${env:USERPROFILE}是否生效 -
settings字段里写的配置,比如"files.exclude": {"**/node_modules": true},会覆盖各子项目自己的.vscode/settings.json,除非你显式禁用继承
为什么 `Ctrl+P` 搜不到其他根目录下的文件
因为没真正启用多根工作区——你只是把文件夹拖进了已打开的单根窗口,VS Code 把它当“临时添加”,不触发跨根索引。资源管理器里看到多个文件夹 ≠ 多根工作区已激活。
验证方法:看窗口标题栏有没有 [工作区] 标识;或者打开命令面板运行 Developer: Inspect Editor Tokens and Scopes,在输出里搜 multiRootWorkspace,返回 true 才算生效。
- 必须从空窗口开始:关闭所有文件夹,确保状态栏显示 “No Folder Opened”
- 必须走
Workspaces: Create Workspace或菜单File → Save Workspace As...,不能只靠Add Folder to Workspace - 保存后的
.code-workspace文件要被双击打开,而不是用Open Folder打开其中某个子目录
`launch.json` 怎么关联到指定子项目
关键不是放哪,而是 cwd 和 workspaceFolder:name 的匹配逻辑。VS Code 不认路径,只认 folders 数组里定义的 name(或默认文件夹名)。
比如 .code-workspace 里写了:
{ "folders": [{ "name": "frontend", "path": "./client" }] },那 launch.json 里就得写 "cwd": "${workspaceFolder:frontend}"。写成 ${workspaceFolder:client} 就无效——哪怕路径确实是 ./client。
-
launch.json必须放在工作区根目录的.vscode/下,不是子项目自己的.vscode/ - 每个
configuration都要明确指定cwd,否则默认是第一个folders项的路径 - 如果子项目需要不同 Node.js 版本或 Python 解释器,得在
.code-workspace的settings里按workspaceFolder:name做条件覆盖,例如:"python.defaultInterpreterPath": "${workspaceFolder:backend}/venv/bin/python"
多人协作时 `.code-workspace` 文件最容易被忽略的坑
路径写死、name 冲突、配置覆盖逻辑误判——这三类问题在线上排查时最耗时间。
典型现象:同事拉下代码后双击 myapp.code-workspace,报错 Unable to open workspace: path does not exist。这不是权限问题,是 path 字段里的路径在他机器上根本不存在,比如你写了 "C:\dev\myapp\backend",他用的是 macOS。
- 永远别手动编辑
path为绝对路径,除非你确定所有协作者操作系统、用户名、开发目录结构完全一致 - 所有子项目
name必须全局唯一,否则launch.json或任务里引用会指向错误目标 -
settings字段里若混用全局配置和子项目特有配置(如 ESLint 插件路径),需用${workspaceFolder:name}显式拼接,不能依赖隐式继承











