全文共2500字,预计学习时长10分钟
图源:slideshare
最近许多流行的开源项目都存在这样的现象,就是在一个存储库中包含多个npm微包,React、Parcel、Babel等等皆是如此。
然而Monorepo可能没你想象中那么香,笔者认为,在大多数情况下,这种模式对项目是弊大于利的,它引入了不必要的复杂性,牺牲了作者和开发人员的可用性。
为什么选择Monorepos?
monorepos的概念是简化依赖项管理。如果项目包含许多包,这些包需要依赖于彼此的特定版本,那么将它们放在一个地方而不是放在单独的存储库中就可以更容易地管理。
同样,对于一个历史记录,这些包将始终具有同步或“原子”提交。为了让事情变得更简单,可以使用自定义脚本自动管理所有包的发布,这样一来,没有相应的包,这个包就不会发布。
一个JavaScriptmonorepo项目通常会有这样的结构:
myproject.git/
packages/
package-1/
package.json
package-2/
package.json
package-3/
package.json
...
scripts/
common-publishing-script.js
这只是一个小例子,你可以看到monorepos可以得到多大的值:
· React: 32个包
(https://github.com/facebook/react/tree/master/packages)
· Parcel: 81个包
(https://github.com/parcel-bundler/parcel/tree/v2/packages)
· Babel: 138个包
(https://github.com/babel/babel/tree/master/packages)
这很荒谬&