Php 如果包相互需要,则更新自定义编写器包失败
我将多个composer软件包作为一个库来使用,有时这些软件包相互需要。例如,在Php 如果包相互需要,则更新自定义编写器包失败,php,git,tags,composer-php,Php,Git,Tags,Composer Php,我将多个composer软件包作为一个库来使用,有时这些软件包相互需要。例如,在modolib/phpunit中,我有: "require": { "modolib/doctrine": "~1.2", } "require-dev": { // ... "modolib/phpunit": "~1.3" }, 在包modolib/document中,我有: "require": { "modolib/doctrine": "~1.2", } "require-dev":
modolib/phpunit
中,我有:
"require": {
"modolib/doctrine": "~1.2",
}
"require-dev": {
// ...
"modolib/phpunit": "~1.3"
},
在包modolib/document
中,我有:
"require": {
"modolib/doctrine": "~1.2",
}
"require-dev": {
// ...
"modolib/phpunit": "~1.3"
},
要对包进行版本设置,我使用标记。在分支master
中为modolib/phpunit
调用git标签
,将输出:
// ...
1.2.8
1.2.9
1.2.10
1.3.0
1.3.1
// ...
1.3.10
// ...
1.2.8
1.2.9
1.2.10
1.2.11
1.2.12
而git标签
对于modolib/doctrine
在分支机构master
发出:
// ...
1.2.8
1.2.9
1.2.10
1.3.0
1.3.1
// ...
1.3.10
// ...
1.2.8
1.2.9
1.2.10
1.2.11
1.2.12
但是,modolib/phpunit
中的composer更新
将完美工作,但modolib/document
中的更新将引发以下错误:
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
,自从我创建了这个标签以来,除了合并到主文件(我使用的是git流)之外,没有添加任何提交
现在看来表达式“modolib/document:“~1.2”
是正确的,因为我可以在modolib/phpunit
本身中更新包,但是编写者在注意到我正在使用它试图请求的包时遇到了问题。或者它可能与require
和requiredev
之间的差异有关吗
如何解决此错误并在modolib/doctor
中更新我的包
更新:
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"
},
现在,composer知道您的包的名称和版本,并且可以验证依赖关系。composer确实注意到需求是否是您当前使用的包。它没有注意到的是标记的版本。当然,Composer无法读取您的存储库标记,因此您需要在
Composer.json
中提供它们:
"name": "modolib/doctrine",
"version": "1.2.12",
// ...
"require-dev": {
// ...
"modolib/phpunit": "~1.3"
},
现在composer知道了包的名称和版本,可以验证依赖关系