.code-workspace文件是VS Code多项目管理的唯一可靠入口,必须通过“文件→将工作区另存为…”手动创建;路径须统一用绝对路径或相对于该文件的相对路径,严禁混用;变量${workspaceFolder:xxx}中的xxx必须与path最后一级目录名完全一致;settings仅覆盖显式字段,语言专属配置应放各项目.vscode/settings.json中。

.code-workspace 文件才是多项目管理的唯一可靠入口,直接拖拽多个文件夹或开多个窗口无法持久化配置、无法隔离设置、也无法跨项目跳转和调试。
如何正确创建并保存 .code-workspace 文件
VS Code 不会自动保存你临时添加的文件夹。必须手动执行 File → Save Workspace As… 才生成可复用、可提交、可共享的 .code-workspace 文件。
常见错误现象:关闭窗口后所有文件夹消失;团队成员打开同一目录却加载不到 backend 和 frontend;Git 提交后别人拉下来报错 Invalid workspace configuration: folder path must be a string。
- 路径写法必须统一:全用绝对路径(如
"path": "/Users/me/project/frontend"),或全用相对于.code-workspace文件所在目录的相对路径(如"path": "../frontend"),不能混用 - 不要把
.code-workspace放在某个项目子目录里——它应独立存放,例如放在~/vscode-workspaces/my-team.code-workspace - 生成后务必手动检查 JSON 格式,确保
"folders"是数组,每个元素含"path"字段,无拼写错误或多余逗号
launch.json 调试时 cwd 和 program 必须显式绑定项目
工作区里有 backend 和 frontend,但 launch.json 里只写 "program": "./dist/index.js",VS Code 默认以工作区根为基准,结果找不到文件,或误跑错项目的构建产物。
关键变量是 ${workspaceFolder:xxx},其中 xxx 必须与 .code-workspace 中 "path" 的最后一级目录名完全一致(VS Code 自动提取,不支持自定义别名)。
- 若
.code-workspace含{"path": "../api-server"},则变量为${workspaceFolder:api-server},不是${workspaceFolder:server} - 每个
configuration都要单独配"cwd"和完整"program",例如:"cwd": "${workspaceFolder:api-server}", "program": "${workspaceFolder:api-server}/dist/server.js" - Windows 路径中反斜杠需双写或改用正斜杠,否则 JSON 解析失败:
"path": "C:/dev/my-app"可用,"path": "C:\dev\my-app"会报错
设置优先级混乱导致配置不生效
很多人以为在 .code-workspace 的 "settings" 里写了 "eslint.enable": true,所有项目就都启用 ESLint——但实际只有该字段被覆盖,其他如 "eslint.packageManager" 或 "typescript.preferences.importModuleSpecifier" 仍走各自 .vscode/settings.json 的值。
更隐蔽的问题:某些设置(如 "extensions.ignoreRecommendations")根本不在文件夹级生效,只能放用户级或工作区级。
- 工作区级
settings仅覆盖显式声明的字段,其余继承用户级 + 文件夹级 - 文件夹级
.vscode/settings.json仍完全有效,且优先级高于工作区级同名字段(注意:仅限同名字段) - 语言专属设置(如
"python.defaultInterpreterPath")建议写在对应项目自己的.vscode/settings.json里,避免跨项目路径错乱
扩展启用范围失控引发性能与误报
同时打开 Python 和 TypeScript 项目,ESLint 插件默认扫描所有打开的文件,对 .py 文件报“no-unused-vars”,还拖慢编辑器响应;Prettier 也可能尝试格式化非 JS/TS 文件。
VS Code 扩展默认全局启用,不会按文件夹自动开关。
- 右键资源管理器中的某个文件夹 → Configure Extension Settings,可为该文件夹单独禁用 ESLint 或启用 Prettier
- 更稳妥的做法:在
.code-workspace中加"extensions.disabledRecommendations": ["dbaeumer.vscode-eslint"],再在需要的项目文件夹内手动启用 - 避免在
.code-workspace中写"extensions.autoUpdate": false——这会影响所有扩展,包括你依赖的调试器
${workspaceFolder:xxx} 怎么算、哪些设置能被覆盖、哪些必须进子文件夹自己配。这些细节不处理好,工作区就只是个“看起来很美”的列表。


















