Composer 2 的运行时依赖检查是在安装或更新后,验证已装包的 PHP 版本、扩展、函数/类及 conflict 是否满足当前环境;默认在 install/update 后及执行 check-platform-reqs 时触发,可通过参数或 config 配置控制。

Composer 2 的运行时依赖检查,本质上是在 安装或更新完成后,扫描已安装的包及其 composer.json 中声明的 require(非 require-dev),然后验证这些依赖是否真正在当前 PHP 环境中可加载、可执行。
它检查什么?
不是检查版本号是否匹配(那是安装阶段干的事),而是检查:
- PHP 版本是否满足包要求(例如
"php": "^8.1") - 必需的扩展是否已启用(如
"ext-curl": "*"、"ext-mbstring": "*") - 必需的函数或类是否存在(仅限极少数通过
ext-*或lib-*声明的底层约束,实际较少见) - 某些包显式声明的
conflict是否被当前环境触发(例如冲突的 PHP 版本或扩展)
它在什么时候触发?
默认开启,且发生在两个关键时机:
-
执行
composer install或composer update后,自动运行一次检查 -
运行
composer check-platform-reqs手动触发(这个命令就是专门暴露该机制的)
注意:它不会在每次 require 自动加载时重复检查,只在 Composer 管理生命周期的关键节点校验一次环境兼容性。
它怎么判断“不满足”?
Composer 会读取每个已安装包的 composer.json,提取其 require 下的平台约束(即以 php、ext-、lib- 开头的条目),然后逐条比对当前运行环境:
- 用
PHP_VERSION_ID和version_compare()校验 PHP 版本 - 用
extension_loaded()检查扩展是否启用 - 用
function_exists()或class_exists()(仅针对极少数lib-*场景)
只要有一项不满足,就会报错并中断操作(除非加 --ignore-platform-reqs 跳过)。
你可以控制它吗?
可以,主要通过三个方式:
-
--ignore-platform-reqs:跳过所有平台检查(危险,慎用) -
--ignore-platform-req=ext-gd:只忽略某一项(比如开发机没装 GD,但你确定不用) - 在
composer.json中配置"config": { "platform": { "php": "8.1.0" } }:伪造平台环境,让检查按指定值走(常用于 CI 或跨版本构建)
基本上就这些。它不是魔法,只是 Composer 在交付前帮你做的一次“环境快照比对”。










