Composer在使用“;安装“;但不是“;更新”;


Composer fails to resolve to installable set of packages on using "install" but not "update"

背景:我在桌面机器上用Silex建立了一个新项目,并用我需要的依赖项建立了我的composer.json文件。我在桌面上成功地运行了"composer.phar install",没有任何问题。

我切换到我的笔记本电脑上进行更多的项目,将git repo克隆到笔记本电脑上,并尝试进行"composer.phar安装",但收到了以下消息:

Your requirements could not be resolved to an installable set of packages.

所以我做了一个"composer.phar更新",它起了作用,但我不想更新我的composer.lock文件。

其他人有这个问题吗?如果没有,有人能解释一下我做错了什么吗?

编辑:我想我可能应该回到这个问题上来,更新这个问题。我已经很久没有遇到这个问题了。我不知道是对composer的更新修复了它(人们可能需要发表评论,让我知道他们是否仍在经历这个问题),还是现在我已经了解了更多关于composer,我只是在以一种我没有遇到的方式做事。不管怎样,我已经有将近一年半没有看到这条消息了,除非我在composer.json中的包规范真的被破坏了。

嗯,我的猜测是,您使用的库基于一个分支(dev-masterdev-branch-namebranch-name@dev),维护人员最近会在该分支上强制推送(例如,为该分支重新设置基础)。

只要可能,尽量使用稳定的分支(具有链接到标记(v1.0.0、1.0.*等)的版本的分支)。如果你不知道在哪里查找,你应该在Packagist上查找你的包,并使用不以dev-开头的版本,或者使用@dev修饰符将最小稳定性设置为dev

当然,这有时是不可避免的。但在这种情况下,您可以随时要求库的维护人员标记一个版本。:)

我的第二个猜测是,您的机器上有不同的库版本。以symfony/icu库为例。根据您机器上的Icu版本,以及您启用的事实或您机器上是否安装了intl扩展,您可能会遇到这些问题。由于composer将尝试将composer.lock与旧机器进行匹配,因此依赖关系将无法解决,因为锁定的包将需要系统所没有的依赖关系。解决这个问题的一个简单方法就是安装所需的扩展。