我们有作曲家的问题。我们的图书馆需要either ... or ...
库。
所以基本上它需要这样:
"php-64bit": ">=5.4.0"
OR
"php": ">=5.4.0" AND "ext-example": "^1.0.2"
所以基本上它需要一个特定的PHP版本。
此外,它需要64位版本的PHP OR
才能使用特定的库。
这可能与作曲家有关吗?如果是这样的话?如果没有,我们可以用另一种方式解决它吗?
答案 0 :(得分:3)
我认为你不应该过度依赖你的依赖关系定义。
两种平台情况都需要PHP 5.4或更高版本。我将其添加为唯一的硬依赖。
Composer具有“建议”功能。您的扩展程序可以使用描述性文本进行建议,以指示只有32位平台才需要它。
您的代码已经必须处理这种情况,因此您可能已经实施了检查,以确定您是否使用64位(并且省略了使用扩展名)。该代码在没有扩展名的情况下在32位上使用时可能会发出错误。
"require": {
"php": ">=5.4"
},
"suggest": {
"ext-example":"Required to use this package on 32bit PHP"
}
这可以避免让用户向他的composer.json
添加脚本,除了帮助他了解首次尝试安装软件包时失败的原因。无论如何,他必须阅读文档。
答案 1 :(得分:1)
我认为,您打算通过Packagist使您的图书馆可用。
Composer可以运行由事件触发的脚本,但只能运行在根composer.json
中定义的脚本。
包含一个脚本,用于检测库中的PHP环境操作系统(64或32位)。由于在这两种情况下都需要">=5.4.0"
,因此在32位环境中,您的脚本可以有条件地要求您使用其他库"ext-example": "^1.0.2"
。
库中的示例Cmd.php
:
namespace Some\Name\Space;
class Cmd
{
public static funtion check32() {
// detect environment here... then:
if ($is32) {
$cmd = 'php composer.phar require vendor/32bit-library:dev-master';
exec($cmd, $output, $return_var);
}
}
这将在应用程序的根目录中运行composer.phar
。
在根composer.json
中引用条目:
"scripts": {
"post-install-cmd": [
"Some\\Name\\Space\\Cmd::check32"
]
}
这里需要注意的是,exec()
必须在用户的计算机上可用,并且用户必须将您的库以及post-install-cmd
包含在composer.json
中。