我对使用Yarn Workspaces和设置单体库相对较新,所以如果这个问题已经有答案,请原谅我。 我不认为我找到了一个清晰的答案,关于是否可以在使用Yarn Workspaces设置的Monorepo中实现这一点。
我想知道是否可能在不同的包中使用两个不同版本的依赖项(在我的情况下是TypeScript),以及如何做到这一点。
我的目标是锁定TypeScript的一个版本(3.4.5)在Package A中,并在此monorepo中的所有其他Packages中使用根package.json
的版本(3.5.0)的TypeScript。
这是文件夹结构。 理想情况下,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版本,但保留Package A的较低版本,那将是最好的情况。
我还尝试在PackageA文件夹中添加一个package.json,其中定义了"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上而不是其父级(例如按钮上的HTML属性将显示为prop)的Prop值。这里是链接到该问题的链接。请让我知道是否需要更多关于我的项目配置的信息!感谢您的见解和建议 :)
node_modules
中安装的typescript,而是使用了其他版本。这似乎更多是关于PackageA或任何在PackageA源代码上使用typescript的工具的问题,而不是关于yarn工作区的问题。 - artempackage.json
中定义。 - Sherman Hui-v
命令行选项将使其打印版本,但除此之外它不会执行任何其他操作。至于其他脚本 - 我不知道。通常情况下,如果在根目录中运行脚本,则应仅从根node_modules
中选择其依赖项。如果您需要在特定软件包(yarn 术语中的“工作区”)的上下文中运行脚本,则可以使用 yarn workspace yarn 命令来实现。 - artem