【发布时间】:2014-07-02 15:22:27
【问题描述】:
我有一个项目,其中 composer 用于安装 Nette Framework 和一个托管在私有 composer 存储库中的私有包。
项目的composer.json:
...
"require": {
"php": ">= 5.3.7",
"nette/nette": "2.1.*",
"myrepo/private-package": "*"
},
"minimum-stability": "dev",
"repositories": [
{
"type": "composer",
"url": "http://myrepo.org"
}
]
...
私有包的composer.json:
...
"require": {
"php": ">= 5.3.7",
"nette/nette": "2.2.*"
},
...
如您所见,该项目需要 Nette 2.1.*。但是,私有包需要版本为 2.2.* 的 Nette。
如果我运行composer install,Composer 会安装2.2.* 版本的 Nette。这不符合项目的 composer.json(需要2.1.*)。
我了解这两项要求都无法满足。但是为什么作曲家没有打印出错误呢?私有存储库是否具有某种优先级?
【问题讨论】:
-
您确定要安装“dev-master”的最新提交吗?该分支曾经是 2.1.x 版本,如果您本地的 composer.lock 引用了 2.2 之前的开发时间的提交,那么版本要求将毫无怨言地得到满足。但这又是另一个例子,说明为什么在 Composer 中使用分支不是最好的主意。
-
确实是最近的提交。我总是删除 composer.lock、整个供应商文件夹和作曲家的缓存,但这仍然会发生。
-
顺便说一句,如果我将第二个要求更改为 2.2.*,它仍然被使用而不是项目的 2.1.*。我会相应地编辑问题,这是比
dev-master更好的例子。
标签: php composer-php