我在一个新项目和使用作曲家的Symfony 2依赖中陷入困境。
首先,我安装了symfony/framework标准版v2。1.5使用composer。这将生成一个具有这些要求且没有最小稳定性节点的composer文件。
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.1.*",
"doctrine/orm": ">=2.2.3,<2.4-dev",
"doctrine/doctrine-bundle": "1.0.*",
"twig/extensions": "1.0.*@dev",
"symfony/assetic-bundle": "2.1.*",
"symfony/swiftmailer-bundle": "2.1.*",
"symfony/monolog-bundle": "2.1.*",
"sensio/distribution-bundle": "2.1.*",
"sensio/framework-extra-bundle": "2.1.*",
"sensio/generator-bundle": "2.1.*",
"jms/security-extra-bundle": "1.2.*",
"jms/di-extra-bundle": "1.1.*",
"kriswallsmith/assetic": "1.1.*@dev"
},
这很好,它安装了所有最新的稳定版本,就像它应该安装的那样。
接下来,我添加一个包-
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.1.*",
"doctrine/orm": ">=2.2.3,<2.4-dev",
"doctrine/doctrine-bundle": "1.0.*",
"twig/extensions": "1.0.*@dev",
"symfony/assetic-bundle": "2.1.*",
"symfony/swiftmailer-bundle": "2.1.*",
"symfony/monolog-bundle": "2.1.*",
"sensio/distribution-bundle": "2.1.*",
"sensio/framework-extra-bundle": "2.1.*",
"sensio/generator-bundle": "2.1.*",
"jms/security-extra-bundle": "1.2.*",
"jms/di-extra-bundle": "1.1.*",
"kriswallsmith/assetic": "1.1.*@dev",
"kunstmaan/admin-bundle": "dev-master"
},
此捆绑包依赖于“开发主机”中的“条令/条令装置捆绑包”(https://packagist.org/packages/doctrine/doctrine-fixtures-bundle)
而该捆绑包取决于具有*(https://packagist.org/packages/doctrine/data-fixtures)
现在,当我在项目中运行composer update时,它告诉我没有任何东西可以满足条令/数据装置的依赖性。名称输入错误,或者没有“稳定”版本,因为最小稳定性默认为稳定。
它确实希望在“开发”稳定性中安装原则-固定装置-捆绑包,因为放置开发大师会自动将这种依赖放在“开发”稳定性中。但这对这个dep的deps没有任何作用,他们一直希望安装稳定,因为这是我的最低稳定性。
在这一点上,我可以通过向我的编写器添加条令/数据装置:dev master或@dev来解决这个问题。项目中的json。
但由于这只是一个示例(knpmenubundle、fosuserbundle等),我必须手动将所有未安装到我自己的composer文件中的DEP添加到DEP中。
另一个解决方案是将我的项目的最低稳定性降低到dev,但是那时我的所有dep,包括像Symfony2这样的稳定dep,都会安装他们的dev版本,而不是标记的版本。
解决这个问题只有一个好办法:唠叨人们,让他们标记更多的发布。如果你真的需要处理不稳定的东西,那么使用requires“@dev”
将其全部白名单是最好的选择。如果你的不稳定比稳定多,那么你可以始终标记@stable
,并将最低稳定性设置为dev。在大多数情况下,仍然有一个锁文件可以保存你的屁股;)