PHP Composer与Git子模块和Symfony2混合



我在这里有一个大型Symfony2应用程序项目,我希望将git子模块引入我们在内部构建的组件中。这里的问题是,每个组件也需要composer包才能正常工作,现在我有symfony2应用程序的composer软件包和组件所需的compose器软件包,我不确定如何在这里处理/设置这些依赖关系。

目前,我正在为我们添加的每个组件(git子模块)手动运行"composer install",这意味着每个组件都有自己的"vendor"文件夹,这还远远不够理想,所以我来到Stack是为了获得关于如何保持这些"symfony composer依赖项"one_answers"component composer依存项"易于维护的好建议。

我不需要确保symfony2应用程序的deps版本与组件deps同步,我只需要让它变得简单和可维护,而不必对我们设置的每个git子模块运行"composer update"。

谢谢!

编辑

我现在使用composer的repositories密钥来定义我的公司私有github repos的URL。我可以提取一个单一的私人回购,我们称之为回购a。然而,当我添加回购B并使回购a成为require回购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

Opininate/数据库组件包确实存在,因为它是respositories密钥中定义的repo之一。

结论

这里的最终解决方案是使用Satis来设置你自己的"packagist"私人版本,它将与packagist一起工作。

我将Satis设置为http://packages.mydomain.com",并在我的主要应用程序composer.json文件中向该URL添加了一个"存储库"键。现在,当评估包名称时,它将使用您自己的自定义satis服务器来为您提供git URL。

我认为最好的选择是通过composer添加这些组件,而不是git子模块。它使编码和维护更加复杂,但它确保您的应用程序了解所有实际的依赖关系。

如果你不想让它们公开,并且想要一种更简单的方法来处理它们,那么我会在本地推出一个Satis部署,并在那里注册它们,将该Satis repo添加到你的composer.json.

Satis是Packagist的一个更简单的版本,只要有它的服务器和运行composer install的机器可以访问你的私人存储库,其他人就看不到它们。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中,它应该会解决所有问题。

我觉得这听起来可能有点像你想要做的,所以我想我会发布这个链接,以防有帮助,而你还没有看到它。我如何使用带有Composer加载库的Git子模块?

您应该使用一个包含以下内容的.gitignore文件:

web/bundles/
app/cache/*
app/logs/*
app/sessions/*
build/
vendor

在开发时,您应该不时地启动php composer.phar update。当您的工作得到验证时,您应该在开发时提交composer.lock文件。

部署时,您可以启动php composer.phar install

相关内容

  • 没有找到相关文章

最新更新