我在这里有一个大型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
。