Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果包相互需要,则更新自定义编写器包失败_Php_Git_Tags_Composer Php - Fatal编程技术网

Php 如果包相互需要,则更新自定义编写器包失败

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":

我将多个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": "~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知道了包的名称和版本,可以验证依赖关系