『』Monorepo可能没你想象中那么香……( 二 )
本文插图
节点项目中非常常见的依赖项 。 需要更少的这种类型的包 。
Monorepos放大了这个问题 。 它们常常不必要地将功能分割到一个单独的包中 。 如果一个包的惟一实际使用者是monorepo , 并且不能实际地看到普通用户在这个存储库中的138个其他包中安装那个包 , 可能并没有必要将它作为一个单独的包 。 理想情况下 , 最好让用户安装一个包含所有内容的包 , 并减少开销 。
本文插图
开发人员的困惑
许多monorepos将包发布到npm上 , 这可能会导致一些问题 。 第一个问题是 , 如果希望开发人员安装其中的一些软件包 , 版本号可能会混淆 。 如果包是紧密耦合的 , 那么弄清楚包与包的搭配使用可能会令人沮丧 。
一些monorepos通过保持版本号的同步来解决这个问题 , 但是如果正在这样做 , 就再次引发了为什么值得创建单独的包的问题 。
本文插图
一个没有文档的公开的Babel包 。
另一个问题是 , 发布单独的包会暴露私有功能 。 尽管希望用户不要使用未归档的功能 , 但是如果有方法访问它 , 用户就会使用它 。 这迫使开发人员在特定的实现细节上保持向后兼容性 。
如果要大量修改软件包 , 则可能仅由于某些人可能依赖未公开API中存在的那个软件包而不得不增加主版本号 。
本文插图
图源:unsplash
本文插图
跟踪Git历史
Git存储库中的历史提交可能非常重要 , 特别是如果需要了解包是如何随时间变化的 , 以及是否需要还原一些已经做出的更改 。 有些人会认为monorepos的一个优点是可以同时恢复所有包 , 这样它们就具有相同的兼容性 。
这是一个很好的观点 , 但是它只简化了版本控制的一个方面 , 而牺牲了其他方面 。
对笔者来说 , 大多数情况下想还原单个包 , 或者检查对该包所做的更改 。 在monorepo的环境中 , 这可能变得更具挑战性 。 必须开始对搜索应用过滤器 , 但是考虑到monorepo中的包是紧密耦合的 , 仍然需要查看在数百个不相关的包中对其他相关包所做的更改 。
【『』Monorepo可能没你想象中那么香……】
本文插图
图源:unsplash
值得注意的是 , Git的设计并不适合在monorepo级别上工作 。 存储库中的文件和提交越多 , 使用Git执行任何基本命令的速度就越慢 。 Atlassian提供了关于这个主题的一些技术细节 。
本文插图
现在有ESM模块
monorepos之前存在并拥有多个微包的原因之一是为了改进绑定 , 确保没有使用的功能不会绑定到应用程序中 。
Lodash这样的库很好地推广了这种模式 。 如果只想使用一小段Lodash代码 , 可以单独导入该包以排除其余的Lodash代码 。
然而 , 随着tree-shaking在捆绑程序中变得常见 , 它们开始被弃用 。 由于现在ESM支持的无处不在 , 包括NodeJS , 所以没有理由再使用单独的包来减少包的大小 。
推荐阅读
- 「欢乐小机友」荣耀Play4T Pro:这可能是最具性价比的4G手机了
- 小贝贝议科技■国产手机厂商有可能使用华为麒麟芯片吗?
- 高盛分析师@高盛分析师:苹果iPhone 12可能推迟到11月发布
- 『木木的视频报告』新发现一颗最像地球的系外行星,可能有生命存在
- 『』新发现一颗最像地球的系外行星,可能有生命存在
- 【】华为可能正在开发具有滑动显示屏的新智能手机
- @你和学霸之间的距离,可能差了个它了
- 「iPhone」苹果为什么还不砍刘海?可能在等屏下摄像头
- #黑脸大人#华为可能正在开发具有滑动显示屏的新智能手机
- 「用户」微软快速修复了Defender运行完全扫描时可能崩溃的bug