HOQU平台的发展是复杂的项目。我们的目的是向三种不同的用户开发三个应用程序。代码有些一样的部分可以在不同的应用程序再使用。主要是有机会通过易于了解的方式把现有的代码组成一起应用程序为了加快发展。
在该文章中,我们将解释如何HOQU通过将所有代码放在一个存储库中(mono-repository)及在JavaScript上与mono-repository工作的Lerna工具正在改善且加快发展应用程序的介绍。
一个存储库与使用几个存储库的主要差别是,一个存储库所有的代码。存储库在下列情况下是整体的:
1)存储库包含一个以上合理的项目
2)这些项目可能没有关系,有弱的关系或者通过其他的方法有关系(例如,通过依赖管理系统)
3)在许多方面,存储库认为是大的:
根据commit数量
根据分支和/或标签
根据文件数量
根据内容的大小(例如,文件夹大小)
我们可以再使用很多代码,我们通过React(React 是一个用于构建用户界面的 JAVASCRIPT 库)生态系统可以把代码变得更模块。我们不仅全面在使用用户界面(UI)和逻辑,我们也全面在使用全部应用程序页面。我们的目标是开发百分之百模块的应用程序。大家看看用户界面和有的页面的例子。
最再使用的部分之一是按钮。按钮作为我们用户界面的一部分,大家可以在不同的项目之间容易地使用。
更复杂的部分之一是选单,它在我们的赞歌应用程序中被使用。
简介页面向广告伙伴和商家在两个应用程序中有一样的介绍与逻辑1。
显然,我们再使用用户界面,不过更主要是我们需要全面再使用有的页面的逻辑和介绍,同时保持发展的弹性及速度。
对该问题最容易的答案是使用npm (npm 是JavaScript包管理工具,它是世界上最大的软件注册表) 链接或者yarn (Yarn 是脸书、谷歌、Exponent和Tilde合作开发的一款新的包管理工具。Yarn是从npm注册表下载的新命令行客户端) 工作空间且把核心软件包插入应用程序。
使用一样的核心软件包开发应用程序时,这是做常用的方法,但是该方法有些缺点:
- 应用程序的版本化可成为一场糊涂。由于错误修正且向不同种的用户的差别,终于对所有的应用程序保持一致的核心软件包可能比较难。
- 因为改变核心软件包时需要换成存储库及手动运行测试,所以在四个不同存储库上可能变成又慢又无效。
对再使用大多数我们的代码的更复杂的答案是使用lerna+yarn工作空间。我们根据谷歌、脸书、推特的经验决定尝试一个存储库的做法。
由于有名的开放资源项目(例如Babel和React)在一个存储库上使用它管理npm软件包。我们结束第二个应用程序的时候,我们测试采取。我们制定的目标是提取包含所有数据的核心软件包且通过从主要软件包输入代码的部分创作两个全部模块的应用程序,这些代码的部分在几个应用程序中可使用,同时存储应用程序的软件包的所有独特组件和主要差别。
转到一个存储库不是太难的过程,不过需要一段时间分开核心软件包(例如,手动改成输入且手动测试)。由于我们避免以上的问题,正面的效果立即就明确无疑了:
- 对新开发员容易地引导程序。只要打字
lerna bootstrap
,依赖无需对所有的项目启动yarn install以设备。而且,因为项目引导程序时对node_modules使用一个文件夹,所以使用yarn工作空间允许节省存储空间。 - 根文件夹是一个包含我们所有的配置的地方,包括我们应用程序的linting、测试、启动等。
package.json
蕴藏所有的指令,由于通过使用lerna同时运行所有的脚本,所以开发且配时节省时间。
由于我们使用Github CI且项目自动部署,构成项目的CI(持续集成)不是太难的作业。不过,今后随着项目的发展,我们考虑转到更先进的版本,例如Travis CI。
总结时,我们使用整体的资源控制不意味着我们有无法分开的代码库。反而,我们有机会把我们的代码变得更模块的且在不同的项目中间容易地使用。
下次再见!
HOQU团队