指定PHP版本的Composer依赖项

时间:2015-08-17 16:39:38

标签: php composer-php

是否可以告诉composer仅在使用指定的PHP版本时才安装依赖项?

原因:我的库使用了password_hash函数,该函数在5.5+中可用,并且有一个兼容库ircmaxell / password-compat for PHP 5.4。但是,在PHP 5.5+上安装此库完全没有意义。那么,是否有可能告诉作曲家只在版本

简短的故事让问题更清晰 - 我想告诉作曲家:

IF php version < 5.5:
    install ircmaxell/password-compat
ELSE:
    skip ircmaxell/password-compat

提前致谢。

P.S。请仅发布直接答案如何执行此操作,而不是任何解决方法或建议删除5.4支持。我也可以提出它们,我在这里寻找智能解决方案:)

2 个答案:

答案 0 :(得分:3)

简短的回答是&#34;它不可能&#34;。

依赖性不是很大。为什么不简单地让它安装呢?如果您使用的是PHP 5.5,则仍将使用内置密码功能。

您还可以使password-compat成为可选的依赖项(suggests)。问题在于维护人员可以将其与您的应用程序一起安装。

最后,您可以创建一个辅助虚拟包。假设您的包裹被称为“Acme&#39;”,可以创建一个辅助&#39; Acme-php54&#39;依赖于 password_compat和您的主项目的包。这样可以保持项目之外的依赖关系,但我认为最简单的方法就是只要你打算支持PHP 5.4就一直安装它,并在EOLs的时候稍微放弃PHP 5.4。

答案 1 :(得分:2)

是的,这是可能的。

考虑拥有一个分支,例如1.x用于遗留的php版本,比如

{
    "name": "some/library",
    "version": "1.0.0",
    "require": {
        "ircmaxell/password-compat": "*"
    }
}

和2.x分支为5.5 +

{
    "name": "some/library",
    "version": "2.0.0",
    "require": {
        "php": ">=5.5"
    }
}

这样松散的版本要求,即some/library:*将解析为适当的版本。

另一种方法是指示用户添加

"replace": {
    "ircmaxell/password-compat": "*"
}

自己需要。

请注意,一些用户(包括我自己)可以动态更改他们的php解释器,并且不会太乐意调试这种自动化问题。