我正在尝试创建类似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需要捆绑包A - C.所以我只需要要求MyNamespace / PackageA,并将三个包安装到PackageA中。
我已尝试设置target-dir但将其置于BundleA
/vendor/MyNamespace/BundleA/PackageA/BundleA
由于这是一套私人回购,我应该使用满意的处理吗?
答案 0 :(得分:1)
对于私人存储库使用满意或只是说明您的私人(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/
答案 1 :(得分:0)
我已经提出了使用git子树的解决方案。 将子组件拆分到它们自己的存储库中,并将它们添加为父存储库的子tress。 EG:
/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)
门不需要发动机,发动机不需要门。但是汽车需要两者。
通过使用git子树,我可以控制父文件夹结构。还使用了target-dir(尚未尝试使用psr-4)我可以告诉作曲家在哪里寻找我的孩子组件。
另一个好处是子组件的可重用性和隔离性。我可以自己使用门或引擎。也许有一天我会制造一辆需要另外发动机的卡车。