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

问题描述

我正在寻找一种方法来分离包含许多 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"
}

解决方法

如果这是用于商业产品,我建议考虑 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 上发布包或如上所述,通过在 composer.json 中注册 git-repositories。

如果您不想拆分存储库,您可以将它保存在您的硬盘驱动器上,然后注册一个路径存储库到其位置(请参阅https://getcomposer.org/doc/05-repositories.md#path)。这可能是最不利的选择,因为您无法轻松地重复使用它。另一位开发者可能使用不同的位置、目录结构甚至操作系统,不同的环境(开发、暂存、生产)也是如此,这使得重用和维护变得更加困难。