在我目前正在工作的公司,我们最近开始将我们的代码移到不同的私有存储库中,以便它更易于维护和重用(并且还使开源变得更容易)它稍后)。
每个PHP存储库也是一个Composer包,只要我们需要它就可以在我们的项目中使用。
目前这种方法存在问题:每当我们需要一个依赖于其他软件包的软件包时,我们需要在根 composer.json 中指定那些软件包。
例如,让我们说在根 composer.json 中我们需要两个包company\b
和company\c
,并且包{ {1}}需要另一个包company\c
。然后生成的根company\d
将如下所示:
composer.json
有没有办法避免在根 composer.json 中指定嵌套依赖项,并在每个包中使用 composer.json 中指定的依赖项?
修改:
我之前说过的所有内容仅对私人套餐有效。如果一个包,让我们说{
"require": {
"company/b": "dev-master",
"company/c": "dev-master",
"company/d": "dev-master"
},
"autoload": {
"psr-4": {
"Company\\" : "src\Company"
}
},
"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"
}
]
}
,需要一个可以在Packagist上找到的公共包,那么可以在company\b
composer.json 中指定该依赖关系它将被导入。
答案 0 :(得分:5)
正如您所知,只有root包可以将存储库元数据添加到已知包的集合中。
我建议你看看Satis来创建一个本地Composer存储库。这只需要您将此单个存储库添加到所有包的所有composer.json
文件中,它将用作有关所有私有存储库的可更新知识源。您不再需要在任何地方添加Git回购列表。
我成功地为我们的IT企业托管了大约120个内部软件包。把它作为一个标志,一旦你开始将孤立的任务分成一个包,你就可以很快地获得更多的任务。
另请注意,认真对待版本控制非常重要。停止依赖分支 - 标记您的软件,发布版本,使用semantic versioning。如果你不这样做,事情会在某些时候破裂,人们会诅咒你(正确)或作曲家(不正确)因为没有工作或搞乱事情。
答案 1 :(得分:0)
快速搜索并阅读Composer documentation后,我发现reposistories
只能在根 composer.json 中指定。
此外,可以在根 composer.json 中指定是否允许使用以下软件包的开发版本:
"minimum-stability": "dev",
"prefer-stable": true
GitHub上的this issue也很有用。