使用 Yarn 工作区时,我可以在根工作区中安装每个 devDependency 吗?或者我应该将它们保存在每个单独的工作区中?
Posted
技术标签:
【中文标题】使用 Yarn 工作区时,我可以在根工作区中安装每个 devDependency 吗?或者我应该将它们保存在每个单独的工作区中?【英文标题】:When using Yarn workspaces, can I install every devDependency in the root workspace? Or should I keep them in each separate workspace? 【发布时间】:2021-10-01 16:01:06 【问题描述】:使用 Yarn 工作区时,我可以在根工作区中安装每个 devDependency
吗?或者我应该将它们放在每个单独的工作区中?
例如:
packages
package1
package.json
package2
package.json
package3
package.json
package.json
这里是每个包所需的devDependencies
。
package1 => external-package-A
package2 => external-package-A
package3 => external-package-A + external-package-B
external-package-A
和 external-package-B
应该安装在哪里?
是否应该在根工作区中安装 external-package-A
,因为我的所有软件包都在使用它?
如果我在我的根工作区也安装external-package-B
会有什么问题吗?
或者我应该在每个软件包中安装它们吗?我的意思是它们会列在每个包的每个 package.json
文件中,而不是列在根目录中。
【问题讨论】:
【参考方案1】:这是我在 Reddit 上找到的。
https://www.reddit.com/r/javascript/comments/9t6yht/yarn_workspaces_why_is_adding_something_to_the/
评论 1
还不错。它必须是明确的。
例如,您有包 A。它依赖于外部依赖项 B。如果您将 B 安装到根目录,您将获得包 A 在工作区中工作,但在安装时它将失败。您的所有开发依赖项(不是单独从工作区调用的)都可以毫无问题地安装到根目录。
例如,我们在每个工作空间中都有 babel(不同包中的不同版本),但在 root 中有 eslint。我们正在努力实现统一的构建过程,因此 babel 也将迁移到根部门。
评论 2
免责声明:我正在努力在公司范围内实施单一回购协议 优步。
两个原因。
如果您分别发布每个包,那就“不好”了。如果你这样做 那,然后当您将其安装在其他地方时,所需的依赖项将 从它的 package.json 中丢失。
如果您在公司范围内的大型 monorepo(或任何大型的 monorepo 足够它有几个独立的团队在单独工作 包),然后升级每个人都依赖的***dep可以 很难登陆,因为它可能需要来自 几十个人,差异可能会以多种方式破坏人们的包裹 测试可能无法捕获(这还不算数之类的东西 不再有活跃维护者的软件包)。
将部门放在顶层是一种称为锁定的策略 依赖,它确实有一些理论上的好处(例如,只有一个 每个直接 dep 的单一版本,因此安装速度更快,CI, 等),但实际上,与 解锁依赖策略(顶层没有依赖)。
【讨论】:
以上是关于使用 Yarn 工作区时,我可以在根工作区中安装每个 devDependency 吗?或者我应该将它们保存在每个单独的工作区中?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Yarn 工作区/nohoist 时,如何控制 Yarn 为依赖项的 peerDependency 选择哪个版本?