我们的composer有问题。我们的图书馆需要一个either ... or ...
图书馆。所以基本上它需要这样:
"php-64bit": ">=5.4.0"
OR
"php": ">=5.4.0" AND "ext-example": "^1.0.2"
所以基本上它需要一个特定的PHP版本。此外,它还需要一个64位版本的PHP OR
——一个特定的库才能工作。
这可能和作曲家有关吗?如果是,怎么办?如果不能,我们能用另一种方式解决吗?
我认为您不应该过度使用依赖项定义。
这两种平台情况都需要PHP 5.4或更高版本。我想补充一下,这是唯一的硬依赖。
Composer具有"建议"功能。您的扩展可以用描述性文本来表示只有32位平台需要它
您的代码已经必须处理这种情况,所以您可能已经实现了检查,以查看您是否使用了64位(并省略了使用扩展名)。当在没有扩展名的32位上使用该代码时,可能会发出错误。
"require": {
"php": ">=5.4"
},
"suggest": {
"ext-example":"Required to use this package on 32bit PHP"
}
这样就避免了用户在composer.json
中添加一个脚本,该脚本只会帮助他理解第一次尝试安装包时失败的原因。无论如何,他都必须阅读文件。
我认为,您打算通过Packagist使您的库可用。
Composer可以运行由事件触发的脚本,但只能运行在根composer.json
中定义的脚本。在库中包含一个检测PHP环境操作系统不可知(64位或32位)的脚本。由于在这两种情况下都需要">=5.4.0"
,因此在32位环境中,脚本可以有条件地需要额外的库"ext-example": "^1.0.2"
。
库中的示例Cmd.php
:
namespace SomeNameSpace;
class Cmd
{
public static function 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()
必须在用户的计算机上可用,并且用户必须在其composer.json
中包括您的库和post-install-cmd
。