作曲家需要替代方案:extensionA或extensionB


Composer require alternative: extensionA or extensionB

我在库包中使用apc用户缓存函数(https://packagist.org/packages/hazardland/db)但正如你所知:

在PHP 5.5之前存在扩展ext_apchttp://pecl.php.net/package/apc(用户缓存+操作缓存)

php 5.5中有ext_apcuhttp://pecl.php.net/package/APCu它只实现用户缓存功能而不实现操作缓存。

因此,在我的composer.json中,我需要需要这两个存在中的一个:ext_apc或ext_apcu,无论用户拥有哪个。有可能设置这样的扩展依赖关系吗?

如果我只需要ext_apc,我将失去php5.5.x用户,但如果我只要求ext_apcu,我将丢失php5.4.x用户。

研究后更新:

因此,composer中有两个指令,分别是provide和replace,但它们都无济于事,因为我需要ext-apcu是由ext-apc提供的,而且ext-*-s是composer的硬编码虚拟包,至少composer团队需要更改它们(我甚至在packagist.org上的虚拟包列表中找不到ext-apc或ext-apcu。)

只加载ext-apcu扩展和之后:

composer show --platform

返回此:

ext-apc 4.0.7 The apc PHP extension ext-apcu 4.0.7 The apcu PHP extension

因此,只需要ext-apc就可以处理这两种情况。