【问题标题】:phpunit 5.6.4 doesn't work in php 5.6 for doctrine's dependency via composerphpunit 5.6.4 在 php 5.6 中不适用于通过作曲家对学说的依赖
【发布时间】:2018-03-10 06:07:41
【问题描述】:

我在作曲家安装依赖项时遇到问题。 我们使用版本 5.6.24 的 php。 安装phpunit 5.6.4时,我们安装学说需要php^7。这是我们在 require 并安装 phpunit 之后的部分 composer.lock。

"packages-dev": [
    {
        "name": "doctrine/instantiator",
        "version": "1.1.0",
        "source": {
            "type": "git",
            "url": "https://github.com/doctrine/instantiator.git",
            "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
        },
        "dist": {
            "type": "zip",
            "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
            "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
            "shasum": ""
        },
        "require": {
            "php": "^7.1"
        },

它为什么会导致以及我们如何修复从 php 7 到 5 的这种依赖关系? 正如我所想,可以在 php 5 中使用 phpunit 5.6.4 作为https://packagist.org/packages/phpunit/phpunit#5.6.4 show。 (我们使用 cakephp 2.10.3 取决于 sebastian/exporter 1.2。所以我们只能在 5.6.4 phpunit 版本下使用。)

我们使用 docker ,所以我们按照命令安装库。

docker run --rm -it -v $(pwd):/app composer:1.4.1 require --dev phpunit/phpunit:"5.6.4" --ignore-platform-reqs --update-with-dependencies 

【问题讨论】:

  • 删除composer.lock 和vendor 文件夹然后尝试再次运行composer install
  • @delboy1978uk 感谢您的评论,但没有任何更改。实际上,我们运行 phpunit 部分但测试有时会失败,发出错误致命错误错误:语法错误,意外 ':',期待 ';'或 [/vendors/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php, 第 95 行] 中的 '{' 或可能的警告。
  • 确保在运行 composer 的机器上没有 php7 可用。
  • @TonyChiboucas 也许是的,因为我们使用官方存储库中的 docker image composer:1.4.1 使用 php 版本 5.6.24。而且我注意到教义/实例化器不包括 phpunit 5.6.4 packagist.org/packages/phpunit/phpunit#5.6.4 的依赖项,并且删除它然后我的所有测试套件都通过了。尽管事实如此,我不知道为什么要安装它。所以,我想知道如何无法安装不依赖的包。这里有人可以帮忙吗?
  • @tkowt,何不简单地将您自己的 doctrine/instantiator 需求定义添加到您的 composer.json 中?

标签: php cakephp doctrine phpunit


【解决方案1】:

这个问题是由教义版本(see http://doctrine-project.org/2017/07/25/php-7.1-requirement-and-composer.html) 和phpdocumentor/reflection-docblock 不兼容引起的,如图所示。我可以覆盖无效版本以使用命令作曲家

require (or --dev) package:$correct_version

当然,还有docker环境。

Composer 文件可以有模糊的依赖项匹配设置,如^、〜 运算符,因此如果安装的库需要依赖项更改要求之前已更新不兼容,则依赖项将被破坏。所以我们需要在 composer.json 中隐式定义它们的正确版本。感谢@TonyChiboucas 的评论add your own requirement definition。它成为解决我问题的线索。

【讨论】:

    猜你喜欢
    • 2012-11-29
    • 2016-09-04
    • 2013-02-05
    • 2015-12-26
    • 2017-08-14
    • 2013-04-15
    • 2014-10-24
    • 2018-09-28
    相关资源
    最近更新 更多