5种共享代码的实用方法:从NPM到Lerna,Git子模块和位

在多个存储库,monorepos和微服务之间,关于在项目之间共享通用代码的讨论越来越激烈。

在项目和存储库之间共享通用代码是更好的模块化和更快的开发的关键因素,但是它也很复杂 。 我之前已经写过有关它的文章 ,并根据我们自己的团队经验进行了分享。

这是在2018年在这些回购协议和项目之间共享代码的5种方法的实用概述。请记住,这实际上是关于人与人之间的交流,文化和牢记模块化的

1.位

Bit将新发现的“ 简单性”和“ 可伸缩性”引入了代码共享 ,因为您的整个团队可以协作并轻松地在项目之间共享代码。

这是一个开源项目和一个组件平台 ,它们共同帮助团队将可重用的代码单元转换为共享组件。

Bit具有自动的依赖欺骗和解析机制,可让您自动将可重用与您的任何JS项目隔离。 这有助于Bit使组件可重用,而零重构需要。

然后,您可以重用其他项目中的组件(使用NPM / Yarn或Bit本身),甚至可以开发和同步不同存储库之间的更改。

“魔术”在于这样一个事实,即Bit不仅处理软件包。 它处理不同项目中的源代码组件。 这意味着它可以在任何地方隔离,更新和同步组件,因此您可以轻松共享更多代码。

Bit还为您共享的组件提供了发现性和协作性,这些共享性被组织在平台的可视化集合中,并进行了逐项测试,构建,可视化渲染等。

这是一个示例React项目和一个匹配的组件集合

Bit的“缺点”是,要使用NPM / Yarn客户端安装代码,您将必须将开放的Bit集线器配置为作用域注册表。

2.带有/不带有Lerna的NPM

Sindre Sorhus具有1000 NPM软件包

NPM发生在JavaScript上是一件了不起的事情,它为代码重用以及可重用模块和库之间的协作打开了大门。 关于这个生态系统的所有抱怨,我们无法想象没有它的生活。

您可能已经对NPM有所了解,所以让我们集中讨论一些限制以及如何克服它们。 从一开始就做出明智的选择可以节省以后的时间。

Dan Abramov支持许多模块

首先,很难为许多软件包设置和维护许多存储库。 因此,某些项目被构建为多包存储库,也称为“ monorepos”。 Bit和Lerna之类的工具(见下文)可以帮助您将项目转换为多包存储库,您可以在此处了解更多信息

这也导致许多团队选择共享库作为共享许多较小组件的解决方案(见下文),因为很难为每个组件都提供一个软件包。

其次,当其他人发布软件包时,您开发软件包的能力有限,通常会导致对软件包回购的拉动请求。 Bit之类的工具可帮助缓解此问题,因为它使您可以将组件直接带入任何存储库,进行更改并共享新版本。

第三,扩展规模时存在可发现性问题。 很难从许多小包装中找到和选择,这会导致Wiki网站和冗长的文档。 汇总的作者Rich Harris 写到

“已经创建了许多博客文章(从头开始,整个网站),以减轻在npm上找到所需内容的困难……”
由您来评估库:它是否有测试? 你能看懂源代码吗? 是否积极维护? 文档易于查找和参考吗?
莱娜
莱娜的九头蛇:看着它的尾巴,我想它会掉下来

将不同的程序包保存在不同的存储库中可能会很快失控,并且很难在整个项目中更新更改。

Lerna帮助您在单个存储库中保留和​​配置多个软件包。 它可以帮助减轻针对不同程序包的不同存储库的痛苦,并有助于构建和测试整个项目。 这样,您不必为不同的软件包保留和维护单独的存储库。

要了解有关进行monorepo的更多信息,请查看以下内容:

3.共享库和公共库

共享库的优点是,您可以将所有共享代码保存在一个存储库中,比多个微包更易于维护和分发。 但是,与Lerna monorepos不同,它们将作为一个包使用。

将所有共享代码都保存在一个存储库中,会迫使用户使用冗余代码,依赖项,复杂性和权重将整个库添加到他们的项目中,而所有这些都只能使用一个组件。

一个React MaterialUI按钮组件—我真的需要一个完整的库吗?

这也使更新和修改的过程非常繁琐,因为每次更改都需要项目的所有者来更新软件包。 这可能会损害组织内部对这些库的采用 。 库中不同组件的可发现性也是一个问题。

这些问题导致Lodash之类的社区长期努力工作,以便将其组件作为单独的软件包 发布到NPM。 Google的Polymer项目 (由Eric Bidelman和其他OSS向导编写 )也将100多个Web元素保存在100多个存储库中。

Lerna可用于将库中的组件分离成仓库中的包。 该位可用于共享现有库中的组件。

例:

4. Git子模块

Git是大多数开发团队的首选SCM。 它允许您将一个存储库作为另一个存储库的子目录 ,为整个项目创建一个工作树 ,并且一个项目可以使用另一个项目中的代码。

在战trench中汲取的教训?

Git的子模块存在各种问题。 首先,它们仅在master分支上工作。 其次,子模块会在各个项目之间创建高度耦合的代码,从而难以在交叉仓库任务上进行合并和协作。 子模块存储库也不知道它是嵌套的,并且可能具有从属存储库。

有多种工具可提供围绕Submodule功能的附加自动化功能,例如git-subtreegitslavebraidgiternal 。 这些工具试图改善子模块的某些可用性问题,但不受特定供应商的支持,并且具有不同的缺点。

5.复制粘贴代码

因为面对现实,未来的我曾经为我做什么?
当你的队友对YOLO大喊大叫

老实说,这也许是地球上代码“重用”的最常用实践。 我想认为,在大多数情况下,这是缺乏“廉价”有效替代方案以及交付周期有些混乱的结果。

问题是,代码复制一点都不便宜。 离得很远。

未来我的经典问题。

重复是代码库中不断增加的债务。 您将很快失去控制,使维护成为一场噩梦,交货周期将越来越长。 许多问题只有在交付生产后才会发现。

最近的一项研究发现GitHub上的一半代码是重复的 。 我们的研究发现,仅在10,000个GitHub存储库中,就对100种不同实现的1000多个重复项进行了复制,例如is-string这样的Javascript函数。

考虑一下如果更多的人共享代码,而不是重复或重新实现代码,可能会编写的新功能。 考虑组织的维护成本和较长的交付周期。

共享代码是关于人的

每个项目和每个开发人员都有自己的关注点,工具和工作流程。 尽管如此,共享代码仍是实现真正模块化的关键,模块化在当今的生态系统中变得越来越流行,并提供了巨大的优势。

我们选择构建Bit 。 无论您选择哪种方法和工具,都必须鼓励一种孕育共享和协作的文化。

毕竟,项目之间的共享始于人与人之间的共享。

学到更多

From: https://hackernoon.com/5-practical-ways-to-share-code-from-npm-to-lerna-and-bit-732f2a4db512

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值