从单一存储库加载一个特定的作曲家包

Posted

技术标签:

【中文标题】从单一存储库加载一个特定的作曲家包【英文标题】:Loading one specific composer package from monolithic repository 【发布时间】:2021-06-18 21:02:48 【问题描述】:

我正在寻找一种方法来分离一个包含许多 Symfony 包的活动作曲家包。

目前这个包在根目录下有一个global composer.json文件,看起来像这样。

src/DIRECTORY_WITH_MULTIPLE_SYMFONY_BUNDLES

composer.json

我想用一个单独的 composer.json 文件制作每个包,所以我可以只需要我需要的包,而不是整个包。

我不想通过 Packagist 发布包,只想直接从我的仓库加载它,就像

"repositories": 
   "composer": 
       "type": "composer",
       "url": "https://packagist.org"
   ,
   "mypackagerepo": 
       "type": "path",
       "url": "https://github.com/PATH_TO_MY_PACKAGE_REPO"
     
   

然后从这样的目录中要求我需要的包

"require": 
   "bundle1": "~1.8.1",
   "bundle2": "~2.18.2"

【问题讨论】:

Symfony 使用“子模块”通过一个 github 存储库管理大约 75 个包。您可以搜索一些细节,但这不是一个简单的任务。不知道如何改造现有存储库并将其划分。您最好的选择可能是将您当前的存储库分解为单独的存储库并从那里开始。在你这样做之前,验证你的包是真正独立的。不被注意的交叉依赖潜入的情况并不少见。 【参考方案1】:

如果这是针对商业产品,我建议考虑 Private Packagist。您将支持您的关键基础架构,并且您将获得开箱即用的东西,如本博文所述:https://blog.packagist.com/installing-composer-packages-from-monorepos/

对于非商业用途,为私人打包服务付费可能并不容易。您可以使用subtreesplit 之类的东西将存储库拆分为较小的只读包(另请参阅https://lostechies.com/johnteague/2014/04/04/using-git-subtrees-to-split-a-repository/),然后您可以在项目中使用它们,方法是在packagist.org 上发布包或注册git -您的 composer.json 中的存储库,如上所述。

如果您不想拆分存储库,可以将其保留在硬盘上,然后将路径存储库注册到其位置(请参阅https://getcomposer.org/doc/05-repositories.md#path)。这可能是最不受欢迎的选择,因为您不能轻易地重复使用它。其他开发人员可能会使用不同的位置、目录结构甚至操作系统,而对于不同的环境(开发、登台、生产)也是如此,这使得重用和维护变得更加困难。

【讨论】:

以上是关于从单一存储库加载一个特定的作曲家包的主要内容,如果未能解决你的问题,请参考以下文章

作曲家安装,自动加载转储后事件返回错误

Laravel 包:发现解决

Composer、Laravel 和本地包

如何使用作曲家从命令行添加非公共存储库?

更新 Composer 时出错

让 GitLab CI 克隆私有存储库