typescript - 在 Yarn Workspace 的不同包中使用不同版本的依赖项

标签 typescript webpack-4 monorepo yarn-workspaces

我对使用 Yarn Workspaces 和设置 Monorepo 还比较陌生,所以如果有人回答了这个问题,请原谅我。我不相信我已经找到了关于使用 Yarn Workspaces 设置 Monorepo 是否可行的明确答案。

我想知道是否可以在不同的包中使用两个不同版本的依赖项(在我的情况下是 TypeScript)以及如何做到这一点。

我的目标是在包 A 中锁定一个版本的 TypeScript (3.4.5) 并使用根 package.json此 monorepo 中所有其他包的 TypeScript 版本 (3.5.0)。

这是文件夹结构。理想情况下,PackageA 将使用 3.4.5,PackageB/PackageC 将使用在根 package.json 中定义的任何版本。

|-- packages
    |-- packageA
    |-- packageB 
    |-- packageC
|-- package.json

这是我迄今为止尝试过的:

我试过添加 nohoist在 webpack 配置的我的工作区选项中,但我不相信包 A 正在使用 TypeScript 3.4.5,因为我没有得到预期的结果。当我更改根时 package.json TypeScript 版本要求为 3.4.5,那是当我得到正确结果时,如果我可以继续对所有其他包使用最新的 TS 而对包 A 保留较低版本,那将是最好的情况。

我也试过添加 package.json在 PackageA 文件夹中,它定义了 "typescript": "3.4.5"作为 devDependency . Yarn 在 PackageA 文件夹中安装了正确的版本,但它似乎没有使用它。

我也很确定 Yarn resolutions不是这种情况的正确工具,因为我的包没有在我的 package.json 中定义为依赖项.
snippet of package.json
  "devDependenices: {
    ...,
    "webpack": "^4.34.0",
    "typescript": "3.5.0-rc",
    "yarn": "^1.15.2"
  },
  "workspaces": {
    "packages": [
      "packages/*"
    ],
    "nohoist": [
      "packageA/typescript"
    ]
  }

如果有人好奇,PackageA 需要使用 TypeScript 3.4.5,因为我需要 react-docgen-typescript解析 Prop 上存在的 Prop 值,而不是它的父级(即按钮上的 HTML 属性将显示为 prop)。这是一个 link到那个问题。

如果我的项目配置需要更多信息,请告诉我!欣赏洞察力和建议:)

最佳答案

根据文档,您必须添加 **在包裹名称旁边,以避免吊起包裹。文档链接 here .
仅避免提升 typescript :

"workspaces": {
"packages": [
  "packages/*"
],
"nohoist": [
  "packageA/typescript/**"
]
}
为了避免提升 typescript 及其依赖项:
"workspaces": {
"packages": [
  "packages/*"
],
"nohoist": [
  "packageA/typescript/**/**"
]
}

关于typescript - 在 Yarn Workspace 的不同包中使用不同版本的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56944265/

相关文章:

angular - 链接 HTTP promise 时如何调用 catch 方法?

typescript - 使用 TypeScript 传递环境值

Webpack 4 禁用缩小但保留摇树

typescript - VSCode - Lerna - Typescript - Monorepo 代码导航

reactjs - 在创建 React 应用程序 Reactjs 应用程序中使用通用 Sdk 模块共享代码库

javascript - 如何避免使用 Yarn 在 monorepo 中安装软件包

inheritance - 与 typescript 的静态类继承的 super 等效

typescript - 用空的 Promise 替换 http 调用

javascript - 如何禁用 webpack 4 代码拆分?

NPM 与 WEBPACK 比较