【问题标题】:Enforcing shared dependencies in a monorepo在 monorepo 中强制执行共享依赖项
【发布时间】:2019-07-23 00:07:26
【问题描述】:

我们有一个使用 lernayarn workspaces 的 monorepo。多个团队为其提供包,并且有一些常见的依赖项,我们希望强制人们使用相同的版本。

有哪些选项可以强制所有包使用相同版本的特定依赖项?有没有办法在不编写自定义脚本的情况下实现这一目标?

我想防止这种情况:

my-repo/
  packages/
    pkg-A/
      package.json
        "address-validator": 1.1.0
    pkg-B/
      package.json
        "address-validator": 1.2.0

我知道你可以使用lerna addlerna run统一添加/升级​​,但是如何防止个人在不知不觉中使他们的包独一无二?

【问题讨论】:

  • 试试npx lerna bootstrap --hoist --strict

标签: npm yarnpkg lerna monorepo yarn-workspaces


【解决方案1】:

我刚刚在 facebook 的 create-react-app 中发现了一个很好的解决方案。他们在 react-dev-utils 包中导入(全部?)外部依赖项并从那里导出它们。然后所有其他包,如react-scripts,从 react-dev-utils 导入依赖项。

这很好,因为您只需要担心使用一个包的最新版本(例如 react-dev-utils)就可以使用您想要控制的所有内容的最新版本。此外,它很灵活,因为您可以通过直接导入不同版本来覆盖其中一个依赖项。

所以它可能看起来像:

my-repo/
  packages/
    my-deps/
      pkg1.js // <--- module.exports = require("pkg1");
      package.json
        "pkg1": 1.2.0
    foo/
      index.js // <--- const pkg1 = require("my-deps/pkg1")
      package.json
        "my-deps": 1.1.0

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2016-02-18
    • 2021-08-05
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2012-04-05
    • 2015-12-12
    相关资源
    最近更新 更多