【问题标题】:Composer PHP Install a bundle inside a parent bundles src folderComposer PHP 在父包 src 文件夹中安装包
【发布时间】:2014-01-10 19:55:35
【问题描述】:

我正在尝试创建类似 Symfony 或 Sylius 的捆绑包结构。它们有一个父包,子文件夹中有一组子包。 EG symfony/framework-standard-edition 将其捆绑包放在 Symfony/Component 中,Sylius 将它们放在 Sylius/Src 中 这些是存储在私有 git 存储库中的私有包。所以我不能使用packagist。

计划是这样的文件夹结构:

/vendor/MyNamespace/PackageA/src/BundleA
/vendor/MyNamespace/PackageA/src/BundleB
/vendor/MyNamespace/PackageA/src/BundleC
/vendor/MyNamespace/BundleD
/vendor/MyNamespace/BundleE

所以包 A - C 包含在包 A 中。 包 A 需要 Bundles A - C。所以我只需要需要 MyNamespace/PackageA,这三个包将安装到 PackageA 中。

我试过设置目标目录,但它把 BundleA 放在里面

/vendor/MyNamespace/BundleA/PackageA/BundleA

由于这是一组私有 repos,我应该使用 satis 来处理它们吗?

【问题讨论】:

    标签: git symfony composer-php


    【解决方案1】:

    对于私有存储库,请使用 satis 或仅说明您的私有 (git) 存储库使用 repositories http://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository 配置的位置。

    我会为你的每个包使用单独的包,我会放弃使用 target-dir 的想法,因为 target-dir 已被弃用 http://getcomposer.org/doc/04-schema.md#target-dir

    但这可能对你有帮助:http://seld.be/

    【讨论】:

    • 是的,我目前正在使用存储库来列出我的私人存储库。我很难改变路径。我想将一组包(或组件)包含到父包中。 EG /vendor/MynameSpace/src 将包括 BundleA 和 BundleB
    • 你为什么要那个?它有什么好处? Composer 正在使用扁平结构工作,我认为这是不可能的。
    • 它会整理我的包的结构。 Symfony 和 Sylius 有很多可以单独使用或作为一个整体使用的包。我也想这样做。假设我有一堆处理汽车零件的捆绑包,比如 wheelBundle 和 doorBundle。我想要做的是将这两个包含在一个 carBundle 中。它们将保存在 vendor/CarBundle/src/WheelBundle 和 vendor/carBundle /src/doorbundle 中。汽车捆绑包将充当这些组件的容器(就像 symfony 框架捆绑包)。
    • 这些捆绑包存储在单独的存储库中。我希望忽略 carBundle/src/ 的内容,并且作曲家会将 doorBundle 移动到该目录中。但是,我不太确定这是否可行。我可能需要重新考虑这一点。
    • 如果我查看 symfony,它总是在不同的目录中。供应商/symfony//Symfony/。它没有安装在同一个组件中。我认为您对此进行了过度设计。
    【解决方案2】:

    我想出了一个使用 git subtree 的解决方案。 将子组件拆分到自己的存储库中,并将它们添加为父存储库的子树。 例如:

    /Car.git (Parent repository)
    /Door.git (Child component of car)
    /Engine.git (Child component of car)
    

    在车上:

    /Car/src/
           DoorBundle
           EngineBundle
       /bin (Contains some generic commands)
       /composer.json (Contains requirements for Door and engine)
    

    门不需要引擎,引擎也不需要门。但 Car 两者都需要。

    通过使用 git 子树,我可以控制父文件夹结构。还使用 target-dir(尚未使用 psr-4 尝试过)我可以告诉作曲家在哪里寻找我的子组件。

    另一个好处是子组件的可重用性和隔离性。我可以自己使用门或引擎。也许有一天我会制造一辆需要另一种引擎或其他东西的卡车。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2012-06-21
      • 2019-09-25
      • 2019-05-08
      • 2019-11-28
      • 2017-09-02
      • 1970-01-01
      相关资源
      最近更新 更多