Composer 2 中的运行时(runtime)依赖检查是如何工作的?

冰火之心
发布: 2025-12-22 15:56:02
原创
756人浏览过
Composer 2 的运行时依赖检查是在安装或更新后,验证已装包的 PHP 版本、扩展、函数/类及 conflict 是否满足当前环境;默认在 install/update 后及执行 check-platform-reqs 时触发,可通过参数或 config 配置控制。

composer 2 中的运行时(runtime)依赖检查是如何工作的?

Composer 2 的运行时依赖检查,本质上是在 安装或更新完成后,扫描已安装的包及其 composer.json 中声明的 require(非 require-dev),然后验证这些依赖是否真正在当前 PHP 环境中可加载、可执行。

它检查什么?

不是检查版本号是否匹配(那是安装阶段干的事),而是检查:

  • PHP 版本是否满足包要求(例如 "php": "^8.1"
  • 必需的扩展是否已启用(如 "ext-curl": "*""ext-mbstring": "*"
  • 必需的函数或类是否存在(仅限极少数通过 ext-*lib-* 声明的底层约束,实际较少见)
  • 某些包显式声明的 conflict 是否被当前环境触发(例如冲突的 PHP 版本或扩展)

它在什么时候触发?

默认开启,且发生在两个关键时机:

  • 执行 composer installcomposer update 后,自动运行一次检查
  • 运行 composer check-platform-reqs 手动触发(这个命令就是专门暴露该机制的)

注意:它不会在每次 require 自动加载时重复检查,只在 Composer 管理生命周期的关键节点校验一次环境兼容性。

它怎么判断“不满足”?

Composer 会读取每个已安装包的 composer.json,提取其 require 下的平台约束(即以 phpext-lib- 开头的条目),然后逐条比对当前运行环境:

Voicv
Voicv

克隆你的声音,就像Ctrl+C, Ctrl+V一样

Voicv 165
查看详情 Voicv
  • PHP_VERSION_IDversion_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 在交付前帮你做的一次“环境快照比对”。

以上就是Composer 2 中的运行时(runtime)依赖检查是如何工作的?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号