Composer 平台依赖项
什么是平台依赖项
Section titled “什么是平台依赖项”Composer 将其运行环境的信息作为虚拟包提供。这使得其他包可以在平台的不同方面(如 PHP、扩展或系统库)上定义依赖关系(require、conflict、provide、replace),包括版本约束。
当你需要某个平台包时,不会安装任何代码。平台包的版本号源自执行Composer的环境,它们无法更新或移除。不过,为了解决依赖关系,可以通过平台配置覆盖它们。
**例如:**如果您使用版本为7.4.42的PHP解释器执行composer update,那么Composer会自动将一个名为php的包添加到可用包池中,并为其分配版本7.4.42。
这就是包如何添加对所使用的PHP版本的依赖:
{ "require": { "php": ">=7.4" }}运行composer命令时,Composer会根据当前使用的PHP版本检查此要求。
不同类型的平台包
Section titled “不同类型的平台包”存在以下类型的平台包,并且可以依赖它们:
- PHP(
php及其子类型:php-64bit、php-ipv6、php-zts、php-debug) - PHP 扩展(
ext-*,例如ext-mbstring) - PHP 库(
lib-*,例如lib-curl) - Composer(
composer、composer-plugin-api、composer-runtime-api)
要查看您的环境中可用的平台包完整列表,可以运行php composer.phar show --platform(或简称show -p)。
本文档进一步说明了各种Composer平台包之间的差异。
插件包 composer-plugin-api
Section titled “插件包 composer-plugin-api”你可以使用插件包来修改Composer的行为。Composer为插件提供了一套有版本控制的API。由于Composer的内部变更可能不会改变插件API,因此API版本可能不会在每次Composer版本升级时都随之升高。例如,在Composer 2.3.12版本中,composer-plugin-api的版本可能仍然是2.2.0。
运行时包 composer-runtime-api
Section titled “运行时包 composer-runtime-api”当使用Composer安装的应用程序运行时(无论是在命令行界面还是通过Web请求),它们都需要vendor/autoload.php文件,通常这是执行代码的第一行之一。Composer自动加载器的调用被视为应用程序的“运行时”。
从2.0版本开始,Composer为应用程序运行时环境提供了额外功能(除了注册类自动加载器之外)。
与composer-plugin-api类似,并非每个Composer版本都会增加新的运行时功能,因此composer-runtime-api的版本也独立于Composer的版本进行升级。
Composer包 composer
Section titled “Composer包 composer”从Composer 2.2.0版本开始,出现了一个名为composer的新平台包,它代表了所执行的Composer的确切版本。因此,依赖此平台包的包可以依赖(或冲突于)特定的Composer版本,以应对composer-runtime-api版本和composer-plugin-api版本均未发生变化的边缘情况。
由于此选项是随Composer 2.2.0引入的,建议至少添加一个版本为>=2.2.0的composer-plugin-api依赖项,以便为运行旧版Composer的用户提供更有意义的错误消息。
一般来说,建议依赖composer-plugin-api或composer-runtime-api,而不是通过composer平台包依赖具体的Composer版本。