composer如何查看当前项目所有依赖的版本号_composer show用法【教程】

11次阅读

直接运行 composer show 可列出当前项目所有已安装依赖及其版本号,包括直接和传递依赖,格式为 vendor/name version description;加 –direct 仅显示 composer.json 中声明的直接依赖。

composer如何查看当前项目所有依赖的版本号_composer show用法【教程】

直接运行 composer show 就能列出当前项目所有已安装依赖及其版本号,无需额外参数。

查看全部依赖及版本(含二级依赖)

默认执行 composer show递归显示所有已安装包(包括 require 和 require-dev 中声明的,以及它们间接引入的),每行格式为:vendor/name version description。注意它不区分直接依赖和传递依赖,也不显示依赖树结构。

  • 想只看直接声明的依赖(即 composer.json 里写的),加 --direct 参数:composer show --direct
  • 想按字母顺序排序输出,加 --sort(部分 Composer 版本支持,v2.5+ 更稳定)
  • 输出过长时可配合 lesshead -20 查看前几行:composer show | head -20

查看某个具体包的详细信息

composer show vendor/name 可查单个包的版本、描述、依赖关系、许可证等。例如:

composer show monolog/monolog

这会显示该包当前安装的精确版本(如 3.5.0)、它的 require 列表、源码仓库地址、是否支持 php 8.2 等元数据。如果包没安装,会提示 Package not found

  • -s--source)可显示包的源码路径(比如 vendor/monolog/monolog/
  • -t--tree)会显示该包所依赖的其他包(仅限其 composer.json 中声明的,非运行时实际加载的)

为什么 composer show 显示的版本和 composer.lock 不一致?

不会不一致——composer show 的版本号完全来自 composer.lock 中记录的已安装结果。如果你看到差异,常见原因有:

  • composer installcomposer update 没有成功执行完,vendor/composer.lock 状态不同步
  • 手动修改过 vendor/ 下某包的代码,但没重新 dump-autoload,show 仍按 lock 文件报告版本
  • 使用了 composer install --no-autoloader 等非常规选项,导致 autoload 未生成,但 show 本身不依赖 autoloader,所以不影响版本显示

替代方案:快速导出纯版本列表

如果只需要“包名 + 版本号”两列,方便比对或导入脚本,可用以下命令:

composer show --format=json | php -r "$d = json_decode(file_get_contents('php://stdin'), true); foreach ($d as $pkg => $info) echo "$pkg {$info['version']}n";"

或者更轻量的 shell 方式(适用于 Composer v2.2+):

composer show --no-ansi | awk '{print $1, $2}' | grep -v '^$'

注意:这些方式跳过了 description 字段,也丢失了 dev-only 包的上下文,适合自动化场景,不适合人工排查依赖冲突。

真正容易被忽略的是:当项目启用了 platform-check 或自定义 platform 配置时,composer show 不会警告你某些包的版本其实在当前 PHP/扩展环境下无法运行——它只告诉你“装了什么”,不判断“能不能用”。得靠 composer check-platform-reqs 单独验证。

text=ZqhQzanResources