【问题标题】:When using Yarn workspaces, can I install every devDependency in the root workspace? Or should I keep them in each separate workspace?使用 Yarn 工作区时,我可以在根工作区中安装每个 devDependency 吗?或者我应该将它们保存在每个单独的工作区中?
【发布时间】: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-Aexternal-package-B 应该安装在哪里?

是否应该在根工作区中安装 external-package-A,因为我的所有软件包都在使用它?

如果我在我的根工作区也安装external-package-B 会有什么问题吗?

或者我应该在每个软件包中安装它们吗?我的意思是它们会列在每个包的每个 package.json 文件中,而不是列在根目录中。

【问题讨论】:

    标签: yarnpkg dependency-management package.json yarn-workspaces


    【解决方案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, 等),但实际上,与 解锁依赖策略(顶层没有依赖)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2021-03-22
      • 1970-01-01
      相关资源
      最近更新 更多