首页 > 解决方案 > 如果 *condition*,PHP Composer 需要依赖项

问题描述

有没有办法composer.json只在满足条件时才要求依赖?

通常,如果 PHP 版本足够高,我想使用 Guzzle 6,否则什么也不做。如果您没有 guzzle,图书馆将处理后备。

我知道您可以使用"some/dependency": "^1.0 || ^2.0",它将选择适合您其他要求的最新专业。我正在寻找的是这样的:

"some/dependency": "nothing || ^2.0"

标签: composer-php

解决方案


您不能直接将其作为composer.json. 但是,您可以通过创建桥接包来实现这一点,它可能为不同的版本定义不同的依赖关系,这可能有不同的要求。

因此,您可以创建me/guzzle-wrapper包并:

  1. 标记1.0.0版本composer.json

    {
        "name": "me/guzzle-wrapper",
        "require": {
            "php": "<5.5",
        }
    }
    
  2. 标记2.0.0版本composer.json

    {
        "name": "me/guzzle-wrapper",
        "require": {
            "php": ">=5.5",
            "guzzlehttp/guzzle": "^6.3"
        }
    }
    

因此guzzlehttp/guzzle,您可以使用此元包而不是直接要求,这取决于 Composer 将安装的 PHP 版本2.0.0,哪个需要 Guzzle,或者1.0.0不需要任何东西。

但是如果你的包可以在没有 Guzzle 的情况下工作,也许你应该把这个要求移到suggest部分?


推荐阅读