composer show -l 能直接查看每个已安装包在 composer.json 中声明的原始版本约束(如 ^10.42.0)及实际安装版本,读取 vendor/composer/installed.json 和 composer.json 组合信息,不联网、结果可靠;它不显示未安装或仅存在于 require-dev 但未被实际安装的包,且反映当前生效状态而非文件最新修改。

composer show -l 能直接看到每个包的版本约束
运行 composer show -l 会列出所有已安装包,并在每行末尾显示它在 composer.json 中写的原始约束(比如 ^10.42.0),同时附带当前实际安装的版本、支持的最低 PHP 版本等。这个命令读的是本地 vendor/composer/installed.json 和 composer.json 的组合信息,不联网、不依赖缓存,结果可靠。
常见误区是只看 composer.json 文件手动找——但有些包可能是通过 require-dev 引入,或被其他包间接带入,show -l 会一并列出来,避免遗漏。
- 输出中
required version列就是你要的约束表达式 - 若某包没出现在结果里,说明它没被真正安装(可能只写了
composer.json但没install/update) - 对 Laravel 项目,特别注意
laravel/framework行的约束,它常决定整个生态兼容边界
想查单个包的约束,用 composer show -l 加包名
比如确认 spatie/laravel-backup 在你项目里写的是什么约束,直接运行:
composer show -l spatie/laravel-backup
输出类似:
spatie/laravel-backup 3.12.0 Requires: laravel/framework:^10.0
这里 Requires 后面的 laravel/framework:^10.0 是它的子依赖约束,而第一列的 3.12.0 是它自身被 composer.json 声明的版本(即你的直接约束)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果包名拼错或未安装,命令会报错或无输出,不是静默失败
-
show -l不显示require-dev包的约束,除非它们也被主依赖链实际安装了 - 若你改过
composer.json但还没update,show -l仍显示旧约束——它反映的是当前生效的安装状态,不是文件最新内容
为什么不能只靠看 composer.json 文件
因为 composer.json 里的约束只是“意图”,不是“事实”。真实安装结果受多种因素干扰:
- 多个包可能共同约束同一个依赖,最终安装版本是交集结果(例如 A 要
^2.0,B 要~1.8,那谁都装不上) - 某些包被
conflict规则排除,即使约束匹配也不会装 - 平台配置(如
"platform": {"php": "8.1.0"})会强制覆盖部分包的 PHP 版本要求 -
composer.lock可能锁定旧版本,导致composer.json更新后仍不生效
所以,要验证一个约束是否真起作用,得结合 show -l(看声明)、show -i(看实际装了啥)、outdated(看有没有可升)三者交叉比对。
composer outdated --direct 不等于 show -l
composer outdated --direct 只检查你手动写进 composer.json 的顶层依赖有没有新版本可升,但它不会告诉你原始约束是什么;而 show -l 明确列出那个约束字符串本身。
-
outdated --direct输出为空,不代表约束没问题——可能约束太死(如"10.42.0"),也可能包已停止维护 -
show -l能看到dev-main这类分支别名约束,outdated默认忽略它们 - 如果你在 CI 流水线里做版本合规检查,
show -l的输出更稳定、更易解析(字段分隔清晰,无颜色/格式干扰)
约束写法本身容易被忽略的一点:Laravel 13.2.0 开始,部分官方包开始要求 ^13.0 并隐式绑定 PHP 8.3+,但 show -l 不会自动提示这个隐含条件,得配合 composer show --platform 和 php -v 手动核对。










