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

时间:2015-12-23 09:53:56

标签: php git tags composer-php

我正在使用多个作曲家包作为库,有时这些包需要彼此。例如,在modolib/phpunit我有:

"require": {
  "modolib/doctrine": "~1.2",
}

并在modolib/doctrine包中,我有:

"require-dev": {
  // ...
  "modolib/phpunit": "~1.3"
},

要对软件包进行版本控制,我使用标签。在分支git tag中为modolib/phpunit调用master会发出:

// ...
1.2.8
1.2.9
1.2.10
1.3.0
1.3.1
// ...
1.3.10
分支git tag的{​​{1}}的

modolib/doctrine表示:

master

但是,// ... 1.2.8 1.2.9 1.2.10 1.2.11 1.2.12 中的composer update完全有效,但modolib/phpunit中的更新会引发此错误:

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并且自从我创建此标记以来没有添加任何提交,除了合并为主(我正在使用git流)。

现在似乎表达式1.2.12是正确的,因为我可以在"modolib/doctrine": "~1.2"本身更新包,但是作曲家在注意到我正在尝试请求的包中工作时遇到问题。或者它可能与modolib/phpunitrequire之间的差异有关吗?

如何在require-dev

中解决此错误并更新我的软件包

更新

modolib/doctrine中的更新有效的原因是因为modolib/phpunit modolib/doctrine需要modolib/phpunit,但作曲家不会加载require-dev部分打包它在更新期间加载。因此,从require-dev的角度来看,包不需要彼此。仅加载modolib/phpunit,但在此存储库中工作时不会尝试加载modolib/doctrine

1 个答案:

答案 0 :(得分:0)

如果要求是您当前正在使用的包,作曲家会注意到。它没有注意到的是标记版本。当然,Composer无法读取您的存储库标记,因此您需要在composer.json

中提供它们
"name": "modolib/doctrine",
"version": "1.2.12",
// ...
"require-dev": {
  // ...
  "modolib/phpunit": "~1.3"
},

现在,composer知道你的包的名称和版本,并且可以验证依赖性。