如何管理多个monorepos
Posted
技术标签:
【中文标题】如何管理多个monorepos【英文标题】:How to manage multiple monorepos 【发布时间】:2021-07-06 16:00:52 【问题描述】:在我们的项目中,我们在整个公司都使用了多个 monorepos。问题是,我们有例如 monorepo-A 和 monorepo-B 和 monorepo-B 使用来自 monorepo-A 的组件(这是不可更改的)。
例如,同一个团队正在开发 monorepo-A 和 monorepo-B。 Monorepo-B 是具有最终产品(服务器的实际输出、网页)的 monorepo,而 monorepo-A 只是在 monorepo-B 和其他团队使用的其他 monorepos 中使用的多个项目。
问题是,当团队同时开发 monorepo-A 和 monorepo-B 并在 monorepo-A 中更改某些内容时,开发人员需要先部署它才能在 monorepo-B 中进行尝试。
所以yarn link
有一种方法,但这不是很舒服,并且可能与包发生冲突。
有没有更好的方法可以在不发布代码的情况下为本地开发处理这种情况?有一个简单的结构(不是真实的,仅用于演示):
monorepo-a/
packages/
components/ (uses types)
schemas/ (uses types)
types/
lerna.json
package.json
tsconfig.json
monorepo-b/
packages/
web-app/ (uses monorepo-a/packages/components)
server/ (uses monorepo-a/packages/schemas)
types/
lerna.json
package.json
tsconfig.json
作为一名开发人员,我想更改 monorepo-A/packages/components 中的某些内容,并能够立即使用它而无需构建 monorepo-b/packages/web-app。但是因为它们不在同一个工作区中,所以我不能在tsconfig.json
中使用paths
或在package.json
中使用workspaces
或来自lerna 的东西。有没有办法甚至不将其发布到本地存储库?
【问题讨论】:
我不知道它如何与 yarn 一起工作,但与 npm 你不能只使用npm install ../monorepo-a/packages/whatever
吗?这会在你的磁盘上创建一个符号链接,但如果你 gitignore node_modules(我确定你这样做了)应该没问题。
【参考方案1】:
考虑创建一个enterprise NPM registry。它会在您迁移时吸收一些资源,但可能是最具可扩展性的解决方案,因为它允许您使用所有常规 NPM 工具来处理内部依赖项。
这将允许每个 mono repo 发布每个子包,这有助于减少代码库之间的耦合并严格定义每个包的角色。
【讨论】:
以上是关于如何管理多个monorepos的主要内容,如果未能解决你的问题,请参考以下文章
lerna+yarn workspace+monorepo项目的最佳实践