多根工作区必须使用 .code-workspace 后缀的 JSON 文件,路径须为相对或绝对路径,不可用 ~ 或环境变量;settings 中可配置语言专属选项和 watcher 排除,优先级介于用户与文件夹设置之间;调试需各子项目独立配置 launch.json;扩展应按工作区禁用以避免冲突。

多根工作区文件必须用 .code-workspace 后缀
VSCode 不会把普通文件夹或 .vscode 目录当多根工作区——必须显式创建一个 JSON 格式的 .code-workspace 文件。常见错误是直接在资源管理器里右键“添加文件夹到工作区”,结果只生成了临时会话,关掉窗口就丢失配置。
正确做法:菜单栏选 文件 → 将文件夹添加到工作区…,加完所有项目后,再点 文件 → 另存工作区为…,手动保存为 my-project.code-workspace。这个文件本质是 JSON,里面包含 "folders" 和可选的 "settings"、"extensions" 字段。
- 路径必须是相对路径(如
"./client")或绝对路径(如"/Users/me/project/server"),不能用环境变量或波浪号~ - 如果路径不存在,VSCode 启动时会静默跳过该文件夹,不报错也不提示
- 不要把
.code-workspace放在某个子项目目录下,建议放在顶层统一管理
settings 里改配置只对当前工作区生效
前端和后端通常需要不同的编辑器行为:比如前端希望启用 ESLint 自动修复,后端可能要禁用它;Node.js 项目需要 "javascript.suggest.autoImports": false 避免污染全局,而 TypeScript 项目又依赖它。这些不能写在用户级或文件夹级设置里,否则会互相干扰。
直接在 .code-workspace 的 "settings" 字段中写:
{
"folders": [
{ "path": "./client" },
{ "path": "./server" }
],
"settings": {
"[javascript]": { "editor.formatOnSave": true },
"[typescript]": { "editor.formatOnSave": true },
"eslint.enable": true,
"eslint.packageManager": "npm",
"files.watcherExclude": {
"**/server/node_modules/**": true,
"**/client/node_modules/**": true
}
}
}-
"files.watcherExclude"很关键:默认 VSCode 会监听所有子文件夹的文件变化,两个项目都含node_modules时容易触发高 CPU 占用 - 语言专属设置(如
"[json]")必须写在"settings"下,不能嵌套在文件夹配置里 - 工作区设置优先级高于用户设置,但低于文件夹内
.vscode/settings.json—— 如果你真在某个子项目里也配了settings.json,它会覆盖工作区同名项
调试配置需按文件夹区分 launch.json 类型
前端启动 Webpack Dev Server,后端跑 nodemon 或 go run,它们的 launch.json 无法共用一套配置。VSCode 调试器靠 "cwd" 和 "program" 定位入口,路径一错就报 Cannot find module 或 No such file or directory。
正确结构是:每个子项目根目录下各自放 .vscode/launch.json,并在其中明确指定工作目录:
- 前端
./client/.vscode/launch.json中设"cwd": "${workspaceFolder}",启动命令为"npm run dev" - 后端
./server/.vscode/launch.json中同样用"${workspaceFolder}",但命令换成"npm run start:dev"或对应脚本 - 不要试图在一个
launch.json里用多个"configurations"混搭前后端——调试器不会自动识别该用哪个"cwd"
启动调试时,先在资源管理器里点击对应文件夹,再按 Ctrl+Shift+D 打开调试面板,选择正确的配置。VSCode 左下角会显示当前激活的文件夹名称,这是唯一能确认你没点错地方的方式。
扩展推荐和禁用要按工作区粒度控制
有些扩展(比如 Prettier、ESLint、Go)在多根工作区里默认全局启用,但前端项目不需要 Go 插件,后端也不需要 Vue 模板语法支持。它们不仅占内存,还可能抢夺文件格式化权限,导致保存时反复触发不同格式化器。
解决方法不是卸载,而是用工作区禁用:
- 打开命令面板(
Ctrl+Shift+P),输入Extensions: Configure Extension Settings - 选中目标扩展(如
esbenp.prettier-vscode),然后点“在工作区中禁用” - 也可以直接在
.code-workspace中加"extensions"字段:"extensions": { "recommendations": ["ms-python.python", "esbenp.prettier-vscode"], "unwantedRecommendations": ["golang.go"] }
真正麻烦的是那些“隐形依赖”:比如你用了 Remote - SSH,但只在后端文件夹里需要连接远程服务器,这时前端文件夹的终端会莫名其妙连不上本地 shell —— 因为插件劫持了所有终端初始化逻辑。这种问题只能靠逐个禁用排查。


















