我对使用 Yarn Workspaces 和设置 Monorepo 比较陌生,所以如果这个问题得到了回答,请原谅我。对于使用 Yarn Workspaces 设置的 Monorepo 是否可行,我不相信我已经找到了明确的答案。
我想知道是否可以在不同的包中使用两个不同版本的依赖项(在我的情况下是 TypeScript)以及如何做到这一点。
我的目标是在包 A 中锁定一个 TypeScript 版本(3.4.5),并package.json
在这个 monorepo 中的所有其他包中使用 root 的 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 文件夹中安装了正确的版本,但它似乎没有使用它。
我也很确定 Yarnresolutions
不是适合这种情况的工具,因为我的包没有定义为我的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)。这是该问题的链接。
如果我的项目配置需要更多信息,请告诉我!欣赏洞察力和建议:)