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

Yarn Berry共享脚本:如何避免子包依赖重复及解决类型报错

Yarn Berry工作区集中管理@types依赖的类型错误解决办法

先说结论

不用在每个子工作区单独声明@types/*类依赖,只要把TypeScript的类型解析和Yarn工作区的依赖可见性配置对就行。

为啥会出这些错

  1. TS2688错误:子工作区的TypeScript默认不会自动往上查找父工作区里的@types/node类型定义,所以找不到对应的类型文件。
  2. TS2584错误:你删除tsconfig里的types配置后,TypeScript的默认类型加载逻辑被打乱,再加上父工作区的类型依赖没被正确识别,连console这种全局API的类型都找不到了。

具体解决步骤

1. 让父工作区的依赖对子工作区可见

父工作区的package.json里,把typescript、@types/node这些依赖放在devDependencies中,同时确保工作区配置正确:

{
  "name": "@repro/packages",
  "private": true,
  "workspaces": ["packages/*"],
  "devDependencies": {
    "typescript": "4.9.5",
    "@types/node": "18.x"
  }
}

子工作区的package.json无需重复声明这些依赖,只要指定好共享脚本和Yarn版本即可:

{
  "name": "@repro/package",
  "private": true,
  "scripts": {
    "build": "yarn p:tsc"
  },
  "packageManager": "yarn@3.3.1"
}

2. 给TypeScript指明类型文件的位置

在子工作区的tsconfig.json里,用typeRoots指向父工作区的@types目录,再显式指定需要加载的node类型:

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "node",
    "typeRoots": [
      "../../node_modules/@types", // 指向父工作区的类型目录
      "./node_modules/@types"
    ],
    "types": ["node"],
    "strict": true,
    "outDir": "./dist"
  },
  "include": ["src/**/*"]
}

如果所有子工作区的TS配置差异不大,推荐在父工作区创建tsconfig.base.json,子工作区直接继承:

// 父工作区 tsconfig.base.json
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "node",
    "typeRoots": ["./node_modules/@types"],
    "types": ["node"],
    "strict": true
  }
}

// 子工作区 tsconfig.json
{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./dist"
  },
  "include": ["src/**/*"]
}

3. 验证配置是否生效

运行yarn workspaces info查看子工作区能否正确识别父工作区的依赖,再在子工作区执行yarn dlx tsc --noEmit测试类型解析,确认错误是否消失。

额外提醒

  • 确保Yarn零安装的缓存目录(.yarn/cache)未损坏,若有问题可删除后重新拉取依赖。
  • 如果子工作区有特有的类型依赖(比如@types/react),可将通用类型依赖放在父工作区,子工作区仅添加自身需要的类型依赖。
  • 不要把子工作区tsconfig中的typeRoots仅设置为当前目录,否则会屏蔽父工作区的类型依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:05:19