8

我们有一个使用lernayarn 工作区的 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添加/升级​​,但是如何防止个人在不知不觉中使他们的包独一无二?

4

1 回答 1

3

我刚刚在 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
于 2019-08-21T23:20:18.060 回答