我们如何开始团队之间在项目之间共享代码

我们如何共享和同步我们的项目是使用所谓的工作建立了一个工具,一个团队之间的组件和模块的故事

我们如何开始团队共享代码

共享代码很难 即使对于使用Reusbale UI组件(例如React组件)的团队来说, 实现真正的可重用性也是一项挑战。

在过去的两年中,我们的团队不断壮大,包括超过15个从事多个项目的开发人员。 除其他外,我们正在使用Node.js微服务和React UI组件构建一个Web应用程序

随着每个新功能和每个新成员加入我们的团队,我们发现共享代码并使代码在我们的项目之间保持同步变得更加困难。 为了避免重复,我们考虑了从子模块到Lerna的所有解决方案。

但是,诸如发布开销,可发现性和可维护性等问题使我们无法成功地大规模共享代码。

最后,我们决定构建自己的解决方案。 一个名为Bit 的开源项目,它将组件变成构建基块,我们的团队可以在我们的项目之间组织,共享和同步。 这是我们学到的东西。

寻找解决方案

最初,我们考虑将不同的组件和模块作为微包装的库发布给NPM。 但是,发布和维护数十个存储库中的更改的开销使我们迅速放弃了此选项。

我们还考虑了Lerna ,它非常适合从单个存储库发布多个软件包。 这个解决方案对我们来说有两个主要问题。

首先是事实,我们必须将我们的代码库重构为几个monorepos才能共享代码。 尽管monorepo在某些用例中可能非常有用,但我们需要一种更好的方式来共享代码而不强制进行重组。

第二个问题是,我们仍然必须在该存储库中手动维护数十个软件包,包括它们的配置和复杂的依赖关系树。 每次更改仍然意味着在原始存储库(及其所有者)中的不同软件包之间进行更改。

由于共享库也不是解决方案,因此我们意识到我们需要一种更好的方法来在我们的项目之间共享代码。

我们将该解决方案视为组件的“ iTunes播放列表”,这将使您可以轻松地从不同项目中发现,共享和开发它们,同时使更改在我们的代码库中保持同步。

因此,我们决定构建Bit 下面是它的工作原理。

在项目之间直接共享组件

Bit的概念很简单。 在Bit之前,我们必须为要共享的每段代码创建一个新的存储库并发布一个新的程序包。 对软件包进行更改也将必须通过该存储库。

拆分存储库只是为了共享代码

使用Bit,您不必拆分存储库即可共享代码。 您也不必重组现有项目的代码库( 示例 )。

相反,您可以将Bit指向我们要共享的任何存储库的一部分,使用它来自动隔离它们(Bit将定义它们的文件/包依赖关系树),然后将它们共享到称为Scope的远程位置( 示例 )。

这根本不会改变现有存储库的结构,而实际上只需几秒钟,因为Bit将定义依赖关系图,并且可以在共享之前将所有构建/测试环境简单地添加到组件中。

与Bit共享组件

从那里,可以使用NPM(和Yarn)轻松发现这些共享组件并将其安装在其他存储库中。

当需要更改组件时,您可以简单地使用Bit import其实际源代码导入到您正在处理的任何项目中,进行所需的更改,并共享新版本(以相同的Scope或新的版本)。

当您将更改的代码共享回Scope时,甚至可以ejecteject以再次成为项目的程序包依赖项。

更改组件后,Bit通过事件驱动的可定制更新策略(仍在工作中)使它在项目之间保持同步。 我可以建议团队成员并接受他们的修改,看看测试是否仍然可以通过并轻松处理依赖关系,从而在我的代码库中进行大量更改。

React组件示例

例如, 这是一个带有React电影应用程序组件的应用程序。 使用Bit(无需创建新的仓库),我们将其组件共享到此Scope中

如您所见,它包含一个英雄组件 ,我们团队中的某些人可能希望将其用于不同的项目。

借助内置的搜索引擎和组件的可视UI功能(从渲染到测试结果(Bit独立运行)和自动解析的文档和示例),可发现性得到了增强。

任何团队成员都可以轻松地找到该组件,在他们的项目中使用,直接在该项目中进行必要的更改并在他们的仓库之间进行同步。 我们已经将它与500多个组件和模块一起使用。

结论

Bit演示(无NPM工作流程)

Bit源自我们多年的经验,渴望开发具有更好模块化的软件。 我们的团队已使用它超过10个月,每天都有更多的团队和图书馆使用它。

使用Bit,我们能够有效地消除我们的存储库和项目之间共享代码的开销。 我们使我们的团队能够更好地组织和发现共享代码,减少了回购的数量,以维护并轻松地从多个方面进行共享代码的开发。

经过几个月的工作,Bit帮助我们创建了有关组件的统一且组织化的知识库,并在项目中共享它们。

这是一个社区协作项目,旨在使代码共享既简单又有效。 欢迎您尝试一下 ,提出反馈意见并提供帮助

学到更多

From: https://hackernoon.com/how-we-started-sharing-components-as-a-team-d863657afaca