php composer.phar update
这样做了(删除了 2.3.0 软件包并安装了整个 2.2.5 Zend Framework):
$ php composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Removing zendframework/zend-filter (2.3.0)
- Removing zendframework/zend-view (2.3.0)
- Removing zendframework/zend-eventmanager (2.3.0)
- Removing zendframework/zend-loader (2.3.0)
- Removing zendframework/zend-escaper (2.3.0)
- Removing zendframework/zend-log (2.3.0)
- Removing zendframework/zend-servicemanager (2.3.0)
- Removing zendframework/zend-stdlib (2.3.0)
- Installing zendframework/zendframework (2.2.5)
Loading from cache
Writing lock file
Generating autoload files
它为什么这么做?我的composer.json 看起来像这样,并且没有提示任何指示上述事件过程的内容:
"repositories":[
{
"type":"composer",
"url":"https://packagist.org/"
},
{
"type":"composer",
"url":"http://packages.zendframework.com/"
}
],
"require": {
"zendframework/zend-log" : "2.*",
"zendframework/zend-escaper" : "2.*",
"zendframework/zend-filter" : "2.*",
"zendframework/zend-view" : "2.*"
}
我的期望是:删除 2.3.0,安装 2.3.1 软件包
我的回答没有完全描述why它被降级了,因为 Composer 中的算法非常密集(这就是为什么update
花费的时间比install
与一个.lock
)。它们会遍历您的所有依赖项、所有潜在版本以及每个依赖项的版本的依赖项是什么。获得所有这些信息后,它会尝试提出“完美”匹配。
有时,依赖项或依赖项的依赖项中最轻微的更改可能会造成巨大的变化。此外,您有时会发现无法解决您的依赖项,因为一个依赖项可能需要symfony/http-foundation ~2.5
并且可能需要symfony/http-foundation 2.1.*
(这不是您的情况,但很高兴知道)。
总而言之,这个故事的寓意是你应该尽可能具体地描述你的情况。composer.json
(特别是在生产中)。这样,您始终可以控制您使用的版本,而不是让 Composer 决定。更糟糕的情况是,你运行的是composer update
并且它无法解决您的依赖关系。然后做一些研究包装学家 https://packagist.org/看看哪些版本可以愉快地一起解决。
我建议使用任一版本~2.3
(这与>= 2.3
and < 3
) or 2.3.*
。那么 Composer 甚至不会尝试版本2.2.5
。查看作曲家的文档 https://getcomposer.org/doc/01-basic-usage.md#package-versions看看如何表达不同的包版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)