如何使用 Yarn 工作区将共享依赖项添加到 monorepo?

old*_*reg 13 yarnpkg yarn-workspaces

我正在使用 Yarn 的工作区功能来管理单一存储库。一些单独的工作区在自己的 中定义了自己的依赖项package.json,但是我也有一些共享的依赖项(一些用于测试整个存储库,一些由所有工作区使用)。我如何以正确的方式声明这些?

如果我尝试将它们添加到 root 中package.json,Yarn 会发出警告。但是,在升级依赖项时,向所有n工作区添加相同的依赖项(有很多并且可能会增长)似乎很乏味且难以维护。

typescript将共享依赖项(例如, 或jestserverless)添加到每个单独的工作区是否正确?

使用 Yarn 1/经典。

我还发现了Yarn Workspaces:我应该如何以及在哪里安装我的依赖项?但没有得到解答 Yarn 工作区共享依赖项谈论使用对等依赖项,但用户遇到了麻烦

WcW*_*WcW 15

经过半天的搜索和尝试,找到了多种管理共享依赖的方法

\n

1.使用syncpack同步依赖版本

\n

https://github.com/JamieMason/syncpack/

\n

鉴于纱线工作区如果版本相同的话将共享依赖项(请参阅https://classic.yarnpkg.com/lang/en/docs/workspaces/),我们所要做的就是将依赖项版本保留在同步以实现依赖共享,这正是syncpack的作用。

\n

我发现这是使共享依赖项起作用的危害最小的方法,而其他方法则需要一定程度的扭曲 package.json。

\n

2. 使用对等依赖

\n

对于每个包,将共享依赖项设置为版本为\xe2\x80\x9c*\xe2\x80\x9d 的peerDependency,并设置根工作区设置真正的依赖项。例如:

\n
# ./package.json\n{   \n    ...\n    "workspaces": ["packages/*"],\n    "dependencies": [\n        "some-lib": "^1.0.0",\n    ]\n}\n\n# ./packages/pkg-a/package.json\n{\n    ...\n    "peerDependencies": [\n        "some-lib": "*",\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

yarn install在工作区根目录下。

\n

3.分享脚本(需要yarn v2)

\n

请参阅https://yarnpkg.com/getting-started/qa#how-to-share-scripts- Between-workspaces

\n

各种各样的

\n

Yarn 提供了工作区 cli 来添加/删除包,请参阅https://classic.yarnpkg.com/lang/en/docs/cli/workspace/

\n
yarn workspace awesome-package add react react-dom --dev\n\nyarn workspace web-project remove some-package\n
Run Code Online (Sandbox Code Playgroud)\n