我这里有一个项目,它是一个大型 Symfony2 应用程序,我希望将 git 子模块引入到我们在这里内部构建的组件中。这里的问题是每个组件还需要 composer 包才能正常运行,现在我有 symfony2 应用程序的 composer 包和组件所需的 composer 包,我不确定如何在这里处理/设置这些依赖项。
目前,我正在为我们添加的每个组件(git 子模块)手动运行“composer install”,这意味着每个组件都有自己的“vendor”文件夹,这远非理想,因此我将使用 Stack 来获得关于如何使这些“symfony Composer 依赖项”和“组件 Composer 依赖项”易于维护的好建议。
我不需要确保 symfony2 应用程序的 deps 版本与组件 deps 同步,我只需要使其简单且可维护,而不必对我们设置的每个 git 子模块运行“composer update”。
谢谢!
编辑
我现在正在使用 composer 的 repositories
键来定义我公司私有(private) github 存储库的 URL。我能够引入一个单一的私有(private) repo ,我们称之为 Repo A。但是,当我添加 Repo B 并使 Repo A require
Repo B 时,它无法正确解析。
Repo A(用户报告组件)的 composer.json:https://gist.github.com/dragoonis/6ea92e062762c516baea
Repo B(数据库组件)的 Composer.json:https://gist.github.com/dragoonis/e54b47b75a79b82ebaea
出现以下错误消息:https://gist.github.com/dragoonis/d79cd2c2dd5cc50bcd2a
opinurate/database-component 包确实存在,因为它是 respositories
键中定义的 repos 之一。
结论
这里的最终解决方案是使用 Satis 来设置您自己的私有(private)版本的“packagist”,它将与 packagist 一起工作。
我在“http://packages.mydomain.com”设置了 Satis ' 并在我的主要应用程序 composer.json 文件中向该 URL 添加了一个 'repositories' 键。现在,在评估包名称时,它也会使用您自己的自定义 satis 服务器为您提供 git URL。
最佳答案
我会说你最好的选择是通过 composer 添加这些组件而不是 git 子模块。它使编码和维护更加复杂,但它确保您的应用程序了解所有实际依赖项。
如果您不希望它们公开并且想要一种更简单的方法来处理它们,那么我会在本地推出一个 Satis 部署并在那里注册它们,将该 satis 存储库添加到您的 composer.json。
Satis 是 Packagist 的一个简单版本,只要安装它的服务器和运行 composer install
的机器可以访问您的私有(private)存储库,其他任何东西都看不到它们。 Composer 网站上有文档:https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md
然后您将设置 packages.yourcompany.com 并将其添加到您的 composer.json
作为包的备用来源。一切都保持私密。
回复编辑: 发生这种情况是因为 composer compartimentalizes,这意味着“存储库”只为您的项目的 composer.json 所知,而 Repo A 中的那个不知道,因此找不到它。您必须在该库中重新定义存储库。即使使用 Satis,也必须将“satis”地址添加到所有涉及的 composer.json 文件中。
将您在应用程序中添加的“存储库”内容添加到 Repo A 和 B 中的 composer.json 中,它应该可以解决所有问题。
关于PHP Composer 与 Git 子模块和 Symfony2 混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21850084/