Composer 平台依赖项#
什么是平台依赖项#
Composer 将有关 Composer 运行环境的信息作为虚拟包提供。这允许其他包定义对平台不同方面的依赖关系(require、conflict、provide、replace),例如 PHP、扩展或系统库,包括版本约束。
当您需要其中一个平台包时,不会安装任何代码。平台包的版本号是从 Composer 执行的环境中派生的,不能更新或删除。但是,为了解决依赖关系,它们可以通过 平台配置 被覆盖。
例如:如果您使用版本为 7.4.42
的 PHP 解释器执行 composer update
,则 Composer 会自动将一个名为 php
的包添加到可用包池中,并为其分配版本 7.4.42
。
这就是包如何添加对所用 PHP 版本的依赖关系的方式
{
"require": {
"php": ">=7.4"
}
}
在运行 composer 命令时,Composer 会将此需求与当前使用的 PHP 版本进行比较。
不同类型的平台包#
存在以下类型的平台包,可以依赖于它们
- 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
#
您可以使用 插件 包修改 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-api
或 composer-runtime-api
,而不是使用 composer
平台包依赖于具体的 Composer 版本。
发现错别字?此文档中有什么错误?分叉并编辑它!