跳转到内容

Composer 平台依赖项

Composer 将其运行环境的信息作为虚拟包提供。这使得其他包可以在平台的不同方面(如 PHP、扩展或系统库)上定义依赖关系(requireconflictprovidereplace),包括版本约束。

当你需要某个平台包时,不会安装任何代码。平台包的版本号源自执行Composer的环境,它们无法更新或移除。不过,为了解决依赖关系,可以通过平台配置覆盖它们。

**例如:**如果您使用版本为7.4.42的PHP解释器执行composer update,那么Composer会自动将一个名为php的包添加到可用包池中,并为其分配版本7.4.42

这就是包如何添加对所使用的PHP版本的依赖:

{
"require": {
"php": ">=7.4"
}
}

运行composer命令时,Composer会根据当前使用的PHP版本检查此要求。

存在以下类型的平台包,并且可以依赖它们:

  1. PHP(php 及其子类型:php-64bitphp-ipv6php-ztsphp-debug
  2. PHP 扩展(ext-*,例如 ext-mbstring
  3. PHP 库(lib-*,例如 lib-curl
  4. Composer(composercomposer-plugin-apicomposer-runtime-api

要查看您的环境中可用的平台包完整列表,可以运行php composer.phar show --platform(或简称show -p)。

本文档进一步说明了各种Composer平台包之间的差异。

你可以使用插件包来修改Composer的行为。Composer为插件提供了一套有版本控制的API。由于Composer的内部变更可能不会改变插件API,因此API版本可能不会在每次Composer版本升级时都随之升高。例如,在Composer 2.3.12版本中,composer-plugin-api的版本可能仍然是2.2.0

当使用Composer安装的应用程序运行时(无论是在命令行界面还是通过Web请求),它们都需要vendor/autoload.php文件,通常这是执行代码的第一行之一。Composer自动加载器的调用被视为应用程序的“运行时”。

从2.0版本开始,Composer为应用程序运行时环境提供了额外功能(除了注册类自动加载器之外)。

composer-plugin-api类似,并非每个Composer版本都会增加新的运行时功能,因此composer-runtime-api的版本也独立于Composer的版本进行升级。

从Composer 2.2.0版本开始,出现了一个名为composer的新平台包,它代表了所执行的Composer的确切版本。因此,依赖此平台包的包可以依赖(或冲突于)特定的Composer版本,以应对composer-runtime-api版本和composer-plugin-api版本均未发生变化的边缘情况。

由于此选项是随Composer 2.2.0引入的,建议至少添加一个版本为>=2.2.0composer-plugin-api依赖项,以便为运行旧版Composer的用户提供更有意义的错误消息。

一般来说,建议依赖composer-plugin-apicomposer-runtime-api,而不是通过composer平台包依赖具体的Composer版本。