Composer 平台依赖项#

什么是平台依赖项#

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

当您需要其中一个平台包时,不会安装任何代码。平台包的版本号是从 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-zts php-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-plugin-api#

您可以使用 插件 包修改 Composer 的行为。Composer 为插件提供了一组版本化的 API。由于 Composer 内部更改可能不会更改插件 API,因此 API 版本可能不会在每次 Composer 版本增加时都增加。例如,在 Composer 版本 2.3.12 中,composer-plugin-api 版本可能仍然是 2.2.0

运行时包 composer-runtime-api#

当使用 Composer 安装的应用程序运行时(在 CLI 或通过 Web 请求),它们需要 vendor/autoload.php 文件,通常作为执行的第一行代码之一。Composer 自动加载器的调用被认为是应用程序的“运行时”。

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

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

Composer 包 composer#

从 Composer 2.2.0 开始,提供了一个名为 composer 的新平台包,它代表执行的确切 Composer 版本。因此,依赖此平台包的包可以依赖于(或与)特定 Composer 版本,以涵盖 composer-runtime-api 版本或 composer-plugin-api 版本都没有更改的边缘情况。

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

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

发现错别字?此文档中有什么错误?分叉并编辑它!