我们有一个使用lerna和yarn workspaces的monorepo。多个团队为此提供了软件包,我们有一些共同的依赖关系,我们在这些依赖关系下会迫使人们使用相同的版本。
有哪些选项可以强制所有软件包使用相同版本的特定依赖项?有没有无需编写自定义脚本就可以实现的方法?
我想避免这种情况:
my-repo/
packages/
pkg-A/
package.json
"address-validator": 1.1.0
pkg-B/
package.json
"address-validator": 1.2.0
我知道您可以使用lerna add
或lerna run
来统一添加/升级,但是如何防止个人在不知不觉中使他们的包裹变得独一无二?
答案 0 :(得分:0)
我刚刚在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