Composer php 尝试运行composer时,PHP 5.4的Travis CI构建失败

Composer php 尝试运行composer时,PHP 5.4的Travis CI构建失败,composer-php,travis-ci,Composer Php,Travis Ci,我正在创建一个用PHP编写的开源项目,并开始使用Travis CI在PHP版本5.4、5.5、5.6和HHVM上进行测试 5.5、5.6和HHVM的测试都顺利通过,但我在PHP5.4上遇到了一个错误 此处列出了错误: 我注意到它与PHPUnit包有关,我使用PHPUnit包进行本地开发,并使用Composer导入。此版本需要symfony/yaml~2.1 | ~3.0。通过谷歌搜索,我发现管道符号被用作OR符号。这一点让我有点困惑 当我阅读~2.1 | ~3.0时,我假设它会尝试拉入其中一个,

我正在创建一个用PHP编写的开源项目,并开始使用Travis CI在PHP版本5.4、5.5、5.6和HHVM上进行测试

5.5、5.6和HHVM的测试都顺利通过,但我在PHP5.4上遇到了一个错误

此处列出了错误:

我注意到它与PHPUnit包有关,我使用PHPUnit包进行本地开发,并使用Composer导入。此版本需要
symfony/yaml~2.1 | ~3.0
。通过谷歌搜索,我发现管道符号被用作OR符号。这一点让我有点困惑

当我阅读
~2.1 | ~3.0
时,我假设它会尝试拉入其中一个,如果失败,则拉入另一个。我知道symfony/yaml3.*需要PHP5.5.9,而2.*需要5.3.9

我不明白的是为什么它失败了。它不是应该把symfony/yaml2.*拉进来吗

现在,我需要PHPUnit 4.6.*用于开发。PHPUnit的要求是PHP5.3.3。然而,当Travis CI尝试测试PHP5.4时,Composer失败了。这完全没有道理。如果它会在PHP5.4上崩溃,PHPUnit4.6需要symfony/yaml3.0,那么要求不是5.5吗


我知道我可以将PHPUnit降级到4.5,但我希望保持最新,所以我不想这样做。

错误消息很简单:Composer无法安装录制在
Composer.lock
文件中的组件,但不符合此PHP的要求:

symfony/yaml 3.0.x-dev requires php >=5.5.9
这不适用于PHP5.4

将开发机器降级到5.4并再次运行
composer update
将修复此问题

在Travis CI中运行
composer update
而不是
composer install
,也可以修复此问题。如果您决定这样做,您还应该使用
composer update运行Travis——首选最低版本
,以测试您声明的最低版本是否正常工作


您还应该尽量避免使用“最低稳定性”:“dev”,除非您确实确定需要最先进的软件包。目前您没有使用其他软件包,因此不需要处理不稳定的开发版本的问题。

删除
composer.lock

# ...

before_script:
  - rm composer.lock
  - composer install --no-interaction --prefer-source

# ...
这就是我在我的
.travis.yml

# ...

before_script:
  - rm composer.lock
  - composer install --no-interaction --prefer-source

# ...

问题:

我的本地php版本是5.5,你是说因为我有这个版本,composer会加载Symfony/yaml3.0?它被记录在我的锁文件中,因此这就是它失败的原因?另外,最好不要将
composer.lock
提交到您的开源库中。另一方面,at在应用程序项目中有着重要的意义。@Sven谢谢您@TomášVotruba你能详细说明一下不提交
composer.lock
文件吗?@RichardA我非常同意这一点:@TomášVotruba我明白了!谢谢你的启示!