composer show vendor/package-name能确认当前安装的确切版本,它直接读取vendor中包的composer.json,输出versions字段才是真实运行时版本,比outdated更可靠。

composer show 能确认当前装的是不是你想要的版本
很多人以为 composer outdated 显示“可升到 v3.2.0”,就代表本地装的是旧版——但实际可能只是 composer.lock 没提交、或被手动改过,导致 vendor/ 里装的版本和约束不一致。直接看 composer show vendor/package-name 最可靠,它读的是已安装包的 composer.json(来自 vendor/),输出里 versions 字段才是真实运行时版本。
常见错误现象:outdated 说 monolog/monolog 可升到 3.0.0,但 show monolog/monolog 显示 2.9.1;再一查 composer.json 里写的是 "monolog/monolog": "^2.0",说明根本没触发主版本升级——outdated 的“可升”只是理论值,受限于当前约束。
- 如果
show输出的版本号和composer.json中约束无法匹配(比如约束是^3.0却装了2.9.1),大概率是composer.lock过期或被跳过 - 对
require-dev里的包也要单独show,比如phpunit/phpunit升错小版本可能导致测试启动失败 - 加
--installed参数能过滤掉未安装的包,避免误判(尤其在部分依赖被replace或provide替代时)
composer validate 是校验锁文件和配置是否自洽的第一关
composer validate 不检查代码逻辑,只验证 composer.json 和 composer.lock 是否语法合法、字段合规、版本约束可解析。它能立刻暴露两类关键问题:一是 lock 文件里记录的某个包版本,在 json 的约束范围内根本不存在(比如 json 写 "php": ">=8.1",但 lock 里存了 PHP 8.0 下解析出的包);二是 lock 文件缺失某些必须字段(如 content-hash),导致 CI 中 install 失败。
容易踩的坑:
- CI 流程里漏掉
validate,等install报错才回头查,浪费构建时间 - 用
--strict时会校验autoload配置路径是否存在,本地能跑通但 CI 容器里路径不同,就会挂在这里 -
validate不报错 ≠ 锁文件和代码一致——它不管vendor/是否真按lock装了,那得靠install --no-dev --dry-run来验
composer check-platform-reqs 防止环境差异引发的“本地OK,线上炸”
很多项目在开发机上 update 成功、测试全绿,一上生产就报 Class not found 或扩展缺失。根本原因是 composer.json 里声明了 "ext-intl": "*",但生产环境没装 intl 扩展,而 outdated 或 show 根本不校验这个。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer check-platform-reqs 会读取 composer.json 的 config.platform(如果有)、当前 PHP 版本、以及所有已加载扩展,逐条比对依赖要求。它输出的每一行都是硬性门槛:
- 标
MISSING的扩展,必须在部署前补上(比如pdo_mysql) - 标
MISMATCH的 PHP 版本,说明platform.php设低了,或服务器 PHP 实际版本低于要求 - 若项目用了
config.platform模拟高版本 PHP,但 CI 环境是真实低版本,check-platform-reqs会立刻暴露不一致
CI 中建议把它塞进构建前置步骤,失败即中断,别等 phpunit 运行一半才崩。
composer audit 要和 outdated 结果交叉看,否则安全更新可能被忽略
composer audit 查的是 CVE 数据库和 Packagist 的废弃标记,outdated 查的是版本约束下的最新兼容版——两者覆盖维度不同。一个包可能 outdated 显示“无更新”,但 audit 直接标红 CRITICAL(比如某 dev-master 分支被发现远程代码执行漏洞,但没发新 stable tag)。
实操要点:
- 加
--format=json输出,方便脚本提取severity字段,自动拦截critical或high级别漏洞 -
audit不会告诉你该升哪个版本修复漏洞,得结合outdated --direct看对应包是否有带security标记的候选版 - 如果
audit报abandoned,别急着换,先跑composer depends vendor/package-name确认谁在用它——可能是某个你没注意的子依赖,盲目删会导致其他包报错
真正容易被忽略的是:audit 默认不检查 require-dev,但像 phpunit 或 phpstan 的漏洞一样会影响本地开发链路,加 --with-dependencies 才能扫全。










