我正在我构建的通用核心之上编写一些应用程序,这是一种我自己的框架。
我想链接这个应用程序,所以如果我更新公共(public)核心中的文件,每个应用程序也会更新。
所以我这样组织代码。我创建了一个 github 项目,在主分支中有公共(public)核心文件,然后每个分支都是一个不同的应用程序。因此,如果我更新公共(public)核心,我可以创建从主分支到应用程序分支的 pull 请求,公共(public)核心将被更新。
像这样一切正常,唯一的问题是当我遇到特殊情况时。
如果我必须在应用程序分支中编辑一个公共(public)核心文件,因为例如我需要针对该应用程序的不同行为,我希望有机会在内部隔离和编辑公共(public)核心的单个文件应用程序分支,但其他文件应该像以前一样更新。
相反,显然在这种情况下我无法再 merge pull 请求,因为应用程序分支中的文件与公共(public)核心中的文件不同。
我的项目通常是这样组织的:
core/...
features/...
public/...
main.ts
core 和 public 文件夹包含公共(public)核心文件,通常这些文件不会更改。所以我分支了公共(public)核心 repo,我在文件夹中添加了功能模块,然后我从 main.ts(它是一个 typescript 网络应用程序)加载了所有模块(核心和功能)。在公用文件夹中,我有不应更改太多的支持文件。使用这种架构,一切正常,直到我需要为一个应用程序更改公用文件夹中的文件。如果我更改它,我将无法再 merge 分支并从公共(public)核心文件接收更新。
我之前尝试过子模块的方法,但我一点都不满意。
目标是能够从公共(public)核心文件中获得持续更新,即使其中一些文件在本地发生了变化并且应该是“未跟踪”或类似的东西。
您对如何解决这个问题或以更好的方式组织代码有什么想法吗?
非常感谢
最佳答案
我认为您的场景非常适合 monorepo。执行此操作的方法是使用工作区。我一直在为此使用 yarn 工作区( yarn1 , yarn2 ),最近 npm also introduced workspaces ,但我最近没有测试过它们。这也可以使用 lerna .
基本思想是你可以在同一个 repo 中有多个 npm 项目,你可以直接链接它们。它类似于安装依赖项,唯一的区别是此依赖项是本地的。所以你可以有这样的结构:
- 应用/应用1
- 应用/应用2
- 库/核心
- 库/功能
然后在应用程序的 package.json 文件中,您可以直接添加对要包含的核心/功能(或任何其他)库的引用。
关于typescript - 如何组织一个项目来共享代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70337541/