vscode报“command not found”主因是终端未将子包node_modules/.bin加入path,多根工作区下仅加载首个文件夹shell配置;应统一用npx turbo或为各子包配独立.zshrc导出path。

VSCode 本身不感知 Turborepo 的多包结构,装错插件或配置不当,反而会让任务执行、日志追踪、路径跳转全部失准——这不是 Turbo 慢,是 VSCode 没“认出”你的 monorepo。
为什么 Turbo 任务在 VSCode 里总报 command not found
根本不是 turbo 没装,而是 VSCode 终端没把子包目录下的 node_modules/.bin 加进 PATH,尤其在多根工作区(multi-root workspace)中,它只读第一个文件夹的 shell profile。
- 别改
~/.zshrc全局 PATH:对第二、第三个根目录完全无效 - 每个子包根目录下放一个极简
.zshrc,内容就一行:export PATH="./node_modules/.bin:$PATH" - 更稳方案:所有
tasks.json或终端命令统一用npx turbo,绕过 PATH 查找逻辑 - 验证方式:在任意子包目录下运行
npx turbo --version,能输出即说明环境就位
日志混杂、卡顿、丢失的真正原因和解法
VSCode 集成终端默认启用输出缓冲,短生命周期子进程(如单个包的 build)的日志会被攒着不刷,或被销毁的 pty 丢弃——turbo run build 本身很快,但你看不到。
- Linux/macOS 下强制禁用缓冲:
stdbuf -oL -eL npx turbo run build - Windows 用户需 Turbo ≥2.6,加参数:
npx turbo run build --no-buffered-output - 检查
terminal.integrated.scrollback是否太小(建议 ≥5000),否则高频日志快速覆盖旧行 - 禁用
"console": "internalConsole":它会切断 stdout/stderr 透传,改用"console": "integratedTerminal" - 确认
terminal.integrated.killProcessOnExit是否关闭——开着会导致终端关了但 turbo 进程还在跑,往已销毁的终端写日志,静默丢失
让 VSCode “看懂” packages/ 下的包结构
VSCode 原生 Explorer 不识别 pnpm workspace 或 turbo.json 定义的包边界,装错插件反而掩盖真实层级,比如 vscode-icons 默认把 packages/ui 当普通文件夹,图标全一样。
- 禁用任何带 “tree”“outline”“structure” 字样的第三方侧边栏插件(如 Project Manager),它们会在大型 monorepo 中频繁监听文件系统,拖慢启动
- 优先启用
Path Intellisense:它按tsconfig.json中的"paths"补全别名,且只在import语句中激活,无额外开销 - 确保
typescript.tsdk指向项目本地node_modules/typescript,否则类型检查走的是 VSCode 内置 TS 版本,和 turbo 构建结果不一致 - Vue 项目必须启用
Volar,并关闭Auto Rename Tag对.vue文件的自动激活——它会干扰 Volar 的模板解析,导致重命名漏改script中的name
真正起效的配置,从来不是堆插件,而是让 VSCode 的路径解析、类型服务、终端行为三者与 turbo.json 和 pnpm-workspace.yaml 对齐。最容易被忽略的一点:所有 tasks.json 中的 command 必须显式指定 cwd 到对应子包路径,否则 npx turbo 会 fallback 到 workspace 根,缓存和 outputs 都可能错位。











