我正在使用多个作曲家包作为库,有时这些包需要彼此。例如,在modolib/phpunit
中,我有:
"require": {
"modolib/doctrine": "~1.2",
}
在包modolib/doctrine
中,我有:
"require-dev": {
// ...
"modolib/phpunit": "~1.3"
},
要对包进行版本控制,我使用标记。在分支master
中调用git tag
进行modolib/phpunit
会发出:
// ...
1.2.8
1.2.9
1.2.10
1.3.0
1.3.1
// ...
1.3.10
分行master
modolib/doctrine
git tag
发布:
// ...
1.2.8
1.2.9
1.2.10
1.2.11
1.2.12
但是,modolib/phpunit
中的composer update
将完美运行,但 modolib/doctrine
中的更新将引发此错误:
Problem 1
- modolib/phpunit 1.3.9 requires moodlib/doctrine ~1.2 -> no matching packages found
- modolib/phpunit 1.3.8 requires moodlib/doctrine ~1.2 -> no matching packages found
- modolib/phpunit 1.3.7 requires moodlib/doctrine ~1.2 -> no matching packages found
- modolib/phpunit 1.3.5 requires moodlib/doctrine 1.2.* -> no matching packages found
- modolib/phpunit 1.3.4 requires moodlib/doctrine 1.2.* -> no matching packages found
- modolib/phpunit 1.3.3 requires moodlib/doctrine 1.2.* -> no matching packages found
- modolib/phpunit 1.3.2 requires moodlib/doctrine 1.2.* -> no matching packages found
- modolib/phpunit 1.3.10 requires moodlib/doctrine 1.*.* -> no matching packages found
- modolib/phpunit 1.3.1 requires moodlib/doctrine 1.2.* -> no matching packages found
- modolib/phpunit 1.3.0 requires moodlib/doctrine 1.2.* -> no matching packages found
- Installation request for modolib/phpunit ~1.3 -> satisfiable by modolib/phpunit[1.3.0, 1.3.1, 1.3.10, 1.3.2, 1.3.3, 1.3.4, 1.3.5, 1.3.7, 1.3.8, 1.3.9]
modolib/doctrine
的当前版本是1.2.12
的,自从我创建此标签以来,除了合并到master(我正在使用git flow(之外,没有添加任何提交。
现在看来表达式"modolib/doctrine": "~1.2"
是正确的,因为我可以在modolib/phpunit
本身更新包,但是作曲家在注意到我正在它试图请求的包中工作时遇到了问题。或者它可能与require
和require-dev
之间的差异有关?
如何解决此错误并在modolib/doctrine
中更新我的软件包?
更新:
modolib/phpunit
中的更新之所以有效modolib/doctrine
是因为 require-dev
中需要modolib/phpunit
,但作曲家不会加载它在更新期间加载的包的require-dev
部分。因此,从modolib/phpunit
的角度来看,包不需要彼此。仅加载modolib/doctrine
,但在此存储库中工作时不会尝试加载modolib/phpunit
。
作曲家会注意到要求是否是您当前正在使用的包。它没有注意到的是标记的版本。当然,Composer 无法读取您的仓库标签,因此您需要在composer.json
中提供它们:
"name": "modolib/doctrine",
"version": "1.2.12",
// ...
"require-dev": {
// ...
"modolib/phpunit": "~1.3"
},
现在,作曲家知道包的名称和版本,并且可以验证依赖项。