是否可以告诉composer仅在使用指定的PHP版本时才安装依赖项?
原因:我的库使用了password_hash函数,该函数在5.5+中可用,并且有一个兼容库ircmaxell / password-compat for PHP 5.4。但是,在PHP 5.5+上安装此库完全没有意义。那么,是否有可能告诉作曲家只在版本 简短的故事让问题更清晰 - 我想告诉作曲家: 提前致谢。 P.S。请仅发布直接答案如何执行此操作,而不是任何解决方法或建议删除5.4支持。我也可以提出它们,我在这里寻找智能解决方案:)IF php version < 5.5:
install ircmaxell/password-compat
ELSE:
skip ircmaxell/password-compat
答案 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解释器,并且不会太乐意调试这种自动化问题。