如何组织项目以共享代码



我正在构建一个公共核心,一种我自己的框架之上编写一些应用程序。

我想链接这些应用程序,所以如果我更新公共核心中的文件,每个应用程序也会更新。

所以我这样组织代码。我创建了一个github项目,在主分支中有公共核心文件,然后每个分支都是不同的应用程序。因此,如果我更新公共核心,我可以创建一个从main到应用程序分支的pull请求,公共核心就会被更新。

这样一切都很好,唯一的问题是当我遇到特殊情况时。

如果我必须在应用程序分支内编辑一个公共核心文件,例如,因为我需要针对该应用程序的不同行为,我希望有机会将公共核心的单个文件隔离并仅在应用程序分枝内编辑,但其他文件应该像以前一样更新。

相反,很明显,在这种情况下,我无法再合并pull请求,因为应用程序分支中的文件与公共核心中的文件不同。

我的项目通常是这样组织的:

core/...
features/...
public/...
main.ts

corepublic文件夹包含公共核心文件,通常这些文件不会更改。因此,我将公共核心repo分支,在文件夹中添加功能模块,然后从main.ts(这是一个typescript web应用程序(加载所有模块(核心和功能(。在公用文件夹中,我有一些支持文件,这些文件应该不会有太大的变化。有了这个体系结构,一切都可以正常工作,直到我只需要为一个应用程序更改公用文件夹中的文件。如果我更改它,我将无法再合并分支并从公共核心文件接收更新。

我以前尝试过使用子模块的方法,但我一点也不满意。

目标是能够从公共核心文件中获得持续的更新,即使其中一些文件是在本地更改的,并且应该是";未跟踪";或者类似的东西。

你知道如何解决这个问题或以更好的方式组织代码吗?

非常感谢

我认为您的场景非常适合单回购。实现这一点的方法是使用工作空间。我一直在使用yarn1,yarn2工作空间,最近npm也引入了工作空间,但我最近没有测试过它们。使用lerna也可以实现这一点。

基本思想是,在同一个回购中可以有多个npm项目,可以直接链接这些项目。这类似于安装依赖项,唯一的区别是该依赖项是本地的。所以你可以有这样的结构:

  • 应用程序/app1
  • 应用程序/app2
  • libs/核心
  • libs/功能

然后在应用程序的package.json文件中,您可以直接添加对要包含的核心/功能(或任何其他(库的引用。

git的最新版本具有稀疏校验功能。

您可以在此处查看更多详细信息。

最新更新