【问题标题】:Update custom composer package fails if the packages require each other如果包需要彼此,则更新自定义作曲家包失败
【发布时间】: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 本身中的包,但是作曲家在注意到我正在尝试请求的包中工作时遇到问题。还是与requirerequire-dev 的区别有关?

如何解决此错误并更新modolib/doctrine 中的包?

更新:

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

【问题讨论】:

    标签: php git tags composer-php


    【解决方案1】:

    如果要求是您当前正在使用的包,作曲家会注意到。它没有注意到的是标记版本。当然 Composer 无法读取你的仓库标签,所以你需要在composer.json 中提供它们:

    "name": "modolib/doctrine",
    "version": "1.2.12",
    // ...
    "require-dev": {
      // ...
      "modolib/phpunit": "~1.3"
    },
    

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

    【讨论】:

      猜你喜欢
      • 2017-09-15
      • 2020-05-11
      • 2015-07-11
      • 2018-05-31
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多