我对使用Yarn Workspaces并设置Monorepo相对较新,所以请回答我。对于使用Yarn Workspaces设置的Monorepo,是否可以实现这一目标,我认为我没有找到明确的答案。
我想知道是否可以在不同的程序包中使用两种不同版本的依赖关系(在我的情况下为TypeScript)以及如何做到这一点。
我的目标是锁定Package A中TypeScript(3.4.5)的版本,并对本monorepo中的所有其他Package使用根package.json
的TypeScript版本(3.5.0)。
这是文件夹结构。理想情况下,PackageA将使用3.4.5,PackageB / PackageC将使用在根package.json
中定义的任何版本
|-- packages
|-- packageA
|-- packageB
|-- packageC
|-- package.json
这是我到目前为止尝试过的:
我曾尝试在Webpack配置的工作区选项中添加nohoist
,但我不认为Package A正在使用TypeScript 3.4.5,因为没有得到预期的结果。当我将根package.json
的TypeScript版本要求更改为3.4.5时,也就是当我获得正确的结果时,如果我可以继续对所有其他软件包使用最新的TS,但保留较低的版本,则将是最好的情况包A。
我还尝试过在PackageA文件夹中添加一个package.json
,在其中它将"typescript": "3.4.5"
定义为devDependency
。 Yarn在PackageA文件夹中安装了正确的版本,但似乎没有使用它。
我也很确定,纱线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。
请让我知道我的项目配置是否需要更多信息!欣赏见识和建议:)
答案 0 :(得分:0)
根据文档,您必须在软件包名称旁边添加**
,以避免吊起该软件包。文档链接here。
为避免打字稿吊起:
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"packageA/typescript/**"
]
}
为避免悬挂打字稿及其相关性,
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"packageA/typescript/**/**"
]
}