在我目前工作的公司,我们最近开始将我们的代码移动到不同的私有存储库中,以便它更易于维护和可重用(并且也使以后更容易开源)。
每个PHP存储库也是一个Composer包,只要我们需要它,我们的项目中就可以需要它。
目前这种方法存在一个问题:每次我们需要一个依赖于其他包的包时,我们也需要在根 composer.json 中指定这些包。
例如,假设在根 composer.json 中我们需要两个包 companyb
和 companyc
,并且包companyc
需要另一个包companyd
。然后生成的根composer.json
将如下所示:
{
"require": {
"company/b": "dev-master",
"company/c": "dev-master",
"company/d": "dev-master"
},
"autoload": {
"psr-4": {
"Company\" : "srcCompany"
}
},
"repositories": [
{
"type": "vcs",
"url": "git@bitbucket.org:company/b.git"
},
{
"type": "vcs",
"url": "git@bitbucket.org:company/c.git"
},
{
"type": "vcs",
"url": "git@bitbucket.org:company/d.git"
}
]
}
有没有办法避免在根 composer.json 中指定嵌套依赖项,并在每个包中使用 composer.json 中指定的依赖项?
编辑:我之前所说的一切都只对私有包有效。如果一个包,比如说companyb
,需要一个可以在 Packagist 上找到的公共包,那么可以在 companyb
composer.json 中指定该依赖项,它将被导入。
正如您正确发现的那样,只有根包才能将存储库元数据添加到已知包的集合中。
我建议你看看Satis创建一个本地的作曲家存储库。这只需要您将这个单一存储库添加到所有软件包的所有composer.json
文件中,它将用作有关所有私有存储库的可更新知识来源。不再需要在任何地方添加 Git 存储库列表。
通过这种方式,我成功地为我们的 IT 企业托管了大约 120 个内部包。将此视为一个标志,一旦您开始将孤立的任务拆分为一个包,您将很快获得更多任务。
另请注意,认真对待版本控制很重要。停止依赖分支 - 标记您的软件,发布,使用语义版本控制。如果你不这样做,事情会在某个时候破裂,人们会诅咒你(正确)或作曲家(不正确)不工作或把事情搞砸。
在快速搜索并查看了作曲家文档后,我发现repositories
只能在根 composer.json 中指定。
此外,还可以在根 composer.json 中指定是否允许使用以下方法开发包的版本:
"minimum-stability": "dev",
"prefer-stable": true
GitHub上的这个问题也非常有用。