【发布时间】:2017-06-20 18:52:33
【问题描述】:
背景
我正在用 PHP 开发一个框架。我首先分别制作每个组件,以便可以独立于框架使用它。
创建四个库A、B、C和D后:
A没有依赖关系
B 和 C 需要 A
D 需要 A、B 和 C
现在我在发布一个库的新版本时遇到了一些问题,我可能不得不更改其他库的依赖项,并且必须为它们发布新版本。例如:A的新版本表示B、C和D的新版本。
我查看了 Symfony 和 Laravel 等其他框架如何解决这个问题。我了解到他们正在使用 Git 的 subtree 功能和 Composer 的 replace 功能。它的工作原理如下:
每个组件都在一个只读存储库中,有自己的
composer.json每个组件都可以需要其他组件,但
replace不需要。框架存储库使用
subtrees包含所有组件。所以不需要使用作曲家require他们。但它应该require他们所有的依赖项(因为 Compser 不再处理它)。框架
replaces 的所有组件。
我也注意到了
组件存储库仅包含源代码(没有单元测试!)
Laravel 制作组件 Contracts 只是为了存储所有组件的所有接口,每个组件都需要它。
问题
我对 Laravel 和 Symfony 如何解决问题的解释正确吗?
我真的必须从组件存储库中删除测试并将它们放入框架一吗?
如果是,只想使用单个组件的人如何确保它通过测试,而不管整个框架是否通过了 wole 测试?
我是否必须确保所有组件依赖项都兼容并在框架中手动要求它们
composer.json?拥有一个接口组件有什么意义?这无论如何都不能单独使用!
有没有更好的方法来解决这个问题?
【问题讨论】:
标签: php git frameworks dependencies composer-php