vscode多根工作区不提供深度隔离,必须手动分层配置:路径须相对于.code-workspace文件位置,禁用全局eslint并由各子包独立控制,launch.json需按子包单独配置,跨项目调试依赖顶层compounds定义,深度隔离依赖各子包独立的.vscode配置文件。

VSCode 的多根工作区本身不提供「深度隔离」——它默认共享终端、搜索、设置和扩展状态,所谓“深度隔离”必须靠手动分层配置实现,否则前端子包之间会互相干扰 lint 规则、自动导入、甚至 TypeScript 类型解析。
为什么 folders 列表里写相对路径却找不到子项目
VSCode 要求 .code-workspace 中的 path 字段必须是相对于该文件自身位置的路径,不是相对于当前工作目录或用户 home。常见错误是把 "./packages/ui" 写在 ~/my-monorepo/monorepo.code-workspace 里,但实际该文件放在 ~/my-monorepo 外层,导致路径解析失败,VSCode 静默跳过该条目。
- 确认
.code-workspace文件所在目录,所有path都要从这里算起 - 不要用
~、${env:HOME}或环境变量——VSCode 不解析它们 - 路径不存在时不会报错,只在资源管理器里少一个文件夹,Ctrl+P 也搜不到对应内容
- 建议统一用绝对路径(如
/Users/you/my-monorepo/packages/ui),避免歧义
settings 里怎么避免 ESLint 和 Prettier 在不同子包间打架
多根工作区的 settings 是全局合并生效的,如果在顶层 .code-workspace 里直接写 "eslint.validate": ["javascript", "typescript"],它会强制应用到所有子包,哪怕某个子包压根没装 eslint 或用的是 biome。
- 禁用全局 ESLint:设
"eslint.enable": false,让每个子包自己通过.vscode/settings.json控制 - 语言级覆盖更安全:在
settings里用嵌套结构,例如"javascript.format.enable": false,再为 TypeScript 单独开"typescript.preferences.importModuleSpecifierEnding": "minimal" - 避免写
"editor.tabSize"这类通用项——不同子包可能有不同缩进约定,应交给各子包自己的.editorconfig - 真正需要统一的只有
"files.exclude"和"search.exclude",比如排除所有dist和.turbo
调试时 launch.json 怎么按子包隔离启动
多根工作区不会自动合并各子包的 .vscode/launch.json;它只会加载当前活动文件所在根目录下的配置。如果你在 packages/api 里按 F5,VSCode 不会理 packages/web 下的 launch.json,更不会帮你串起来跑两个服务。
- 每个子包必须有自己的
.vscode/launch.json,且type字段要匹配运行时(如"type": "node"或"type": "pwa-node") - 跨子包复合调试要用
compounds,但必须定义在顶层.code-workspace的"launch"字段下(不是某个子包的launch.json) -
compounds中的configurations必须引用已存在的命名配置,名字要完全一致(大小写敏感) - 别指望自动识别
package.json#scripts—— VSCode 不读那个,得手动写runtimeExecutable或program
真正的深度隔离不在 UI 层,而在配置粒度:每个子包的 .vscode/settings.json、.vscode/launch.json、.prettierrc 和 tsconfig.json 必须独立存在且互不继承;.code-workspace 只负责组织路径和极少数全局排除规则,越少往里塞设置,越不容易出问题。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











