You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yarn Workspace子包中tsc命令找不到的原因解析

Yarn 3子包无法继承父包devDependencies的原因

场景还原

根目录package.json配置:

{
  "scripts": {
    "compile": "tsc --build",
  },
  "devDependencies": {
    "typescript": "^4.8.4"
  }
}

packages/foo子包package.json配置:

{
  "scripts": {
    "compile": "tsc --build"
  },
  "devDependencies": {
  }
}

在根目录执行yarn compile可正常编译,但进入packages/foo执行yarn compile时提示command not found: tsc,只有给子包添加typescript依赖后才能正常运行。

核心原因

Yarn 3的monorepo工作区采用依赖隔离设计,父包与子包的依赖环境相互独立,具体细节:

  • 子包是独立项目单元:Yarn 3把每个子包当作独立的项目看待,父包的devDependencies仅作用于根目录,不会自动被子包继承。子包只会使用自身package.json中声明的依赖。
  • 脚本执行的路径规则:在子包目录执行脚本时,Yarn会优先查找子包本地node_modules/.bin下的可执行命令。由于子包没声明typescript,自然找不到tsc;而根目录执行时,会使用根目录node_modules/.bin里的tsc,所以能正常运行。
  • 依赖共享需显式配置:Yarn 3不默认开启跨包依赖共享,若要让子包复用父包的依赖,需要手动配置:
    • 子包通过peerDependencies声明typescript依赖,由根目录统一安装管理;
    • 从根目录执行子包脚本:yarn workspace packages/foo compile,此时会复用根目录的依赖环境;
    • 部分Yarn版本可通过workspaceDependencies字段指定共享的根依赖。

内容的提问来源于stack exchange,提问作者Trevor Allred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:31:20