【发布时间】:2016-03-29 17:21:46
【问题描述】:
我正在使用多个作曲家包作为库,有时这些包需要彼此。例如,在modolib/phpunit 我有:
"require": {
"modolib/doctrine": "~1.2",
}
在包裹modolib/doctrine我有:
"require-dev": {
// ...
"modolib/phpunit": "~1.3"
},
为了对包进行版本控制,我使用标签。在分支master 中为modolib/phpunit 调用git tag 输出:
// ...
1.2.8
1.2.9
1.2.10
1.3.0
1.3.1
// ...
1.3.10
和git tag for modolib/doctrine 在分支master 推出:
// ...
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。
【问题讨论】:
标签: php git tags composer-php