composer如何查看已安装包信息?(命令详解)

1次阅读

composer show 是查看已安装包详情的唯一可靠命令,直接读取 vendor/ 目录内容,可查全部包、指定包依赖树或详细元信息;误用 composer list -a 会查命令而非包;show 显示实际安装版本,outdated 比对锁文件与 packagist 判断可升级项。

composer如何查看已安装包信息?(命令详解)

composer show 查看包详情最直接

想确认某个包装了没、装的什么版本、依赖了谁,composer show 是唯一需要记住的命令。它不查锁文件也不读配置,只看 vendor/ 里真实存在的包,结果最可信。

常见错误是输错包名(比如把 monolog/monolog 写成 monolog),或者漏掉 vendor 目录(执行前确保在项目根目录下)。

  • 查所有已安装包:composer show
  • 查指定包(含依赖树):composer show monolog/monolog
  • 查包的详细元信息(如作者、关键词、autoload 配置):composer show --all monolog/monolog

composer list -a 找不到包?那是命令用错了

composer list -a 列的是 Composer 自带的命令列表,不是已安装的 PHP 包。很多人搜“composer 查看包”时点进官方文档首页,第一眼看到这个命令就试了,结果返回一 installupdate —— 和包无关。

真正要查包,只有 showoutdateddepends 这几个命令管用。list 只用来查命令本身。

  • 误用现象:composer list -a | grep monolog → 空输出,因为根本不在那儿
  • 正确替代:composer show | grep monologcomposer show monolog/monolog
  • 如果连 show 都报错 “Could not open input file”,说明没在 composer.json 所在目录运行

composer show 和 composer outdated 结果为啥不一样

composer show 显示当前 vendor/ 里实际加载的版本;composer outdated 是拿 composer.lock 里的版本去 Packagist 查最新可用版本,再比对——它反映的是「能升但还没升」的状态。

比如你装了 symfony/console v5.4.0,但 Packagist 上已有 v5.4.31,outdated 就会标出来;而 show 只老老实实告诉你现在就是 v5.4.0。

  • 想确认线上跑的是哪个版本 → 用 composer show
  • 想批量检查哪些包该升级了 → 用 composer outdated
  • outdated 默认跳过 dev 包,加 --all 才显示 phpunit/phpunit 这类开发依赖

vendor/autoload.php 被删了,show 还能用吗

能。只要 vendor/ 目录还在,composer show 就不依赖 autoload 文件或任何 PHP 解析过程——它只是读取每个包下的 composer.jsoninstalled.json(由 Composer 自己维护)。

但反过来,如果整个 vendor/ 被删了,show 就会报错 “No composer.json found in the current Directory”,因为找不到 installed.json 的来源。这时候得先 composer install

  • 常见误操作:CI 脚本里删了 vendor 又立刻跑 composer show → 失败
  • 安全做法:删 vendor 前先存一份 composer show --format=json > installed.json.bak
  • 注意:show 不校验包是否能正常加载,只管“有没有”。类找不到是 autoload 或 PSR-4 配置问题,不是 show 的责任

有些细节得自己多试两次:比如包名大小写敏感、带斜杠的完整命名、是否在子目录里执行命令——这些地方一错,show 就静默失败,而不是报错提醒。

text=ZqhQzanResources