直接运行 composer show 仅列出 composer.json 中 require 和 require-dev 显式声明的顶层依赖包,不展开间接依赖、不扫描 vendor 目录,完全依赖 composer.lock 的 packages 字段;若包仅在 require-dev 且执行过 composer install --no-dev,则不会显示。

直接运行 composer show 就能列出当前项目所有已安装的顶层依赖包(即 composer.json 中 require 和 require-dev 显式声明的),但默认不展开间接依赖、不显示 autoload 配置、也不反映 vendor 目录真实文件结构——想看全貌或查具体问题,必须加参数。
为什么 composer show 输出比 ls vendor/ 少很多
它默认只读 composer.lock 里的顶级 packages 字段,跳过所有传递依赖(比如 symfony/console 拉进来的 psr/log)。你手动写在 require 或 require-dev 里的才会出现在默认输出里。
- 执行前必须确认:已在项目根目录(含
composer.json和vendor/),且已运行过composer install或composer update - 如果用过
composer install --no-dev,require-dev里的包(如phpunit/phpunit)不会出现,哪怕它们还在composer.json里 -
composer show不扫描vendor/目录,完全依赖composer.lock解析结果;锁文件损坏会导致输出与磁盘不一致 - 想确认某个包是否真被装进
vendor/,最可靠的方式是ls vendor/包名或composer show vendor/package-name看是否返回版本号
composer show vendor/package 查单个包是否真装上了
这是验证安装状态最准的方式,它读的是 vendor/composer/installed.json,不是 composer.lock 的声明。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 包名必须写全、全小写:
monolog/monolog,写成Monolog/Monolog或monolog都会报[InvalidArgumentException] Package not installed - 如果刚改完
composer.json但没跑composer install或composer update,show显示的仍是旧版本——不是缓存问题,是根本没重装 - 输出里
version行显示的是实际安装版本,不是最新版;想看有没有可升级版本,得用composer outdated或composer show vendor/package --all - 如果提示
Package not found,先ls vendor/确认包目录是否存在,再检查大小写
composer show --tree 查清谁依赖了谁
这是还原 Composer 实际解析出的安装路径的唯一方式,不是“展示你写了什么”,而是“它到底装成了什么样”。
- 输出是缩进结构,例如:
laravel/framework v10.48.12 └── symfony/console v6.4.7 └── psr/log 3.0.0 - 它只展示
composer.lock里已确定的路径;如果某包只在require-dev且你用过--no-dev,就不会出现 - 终端宽度不够时长包名会被截断,建议加
| less -S或重定向到文件:composer show --tree > deps.tree - 想快速定位某依赖,直接管道过滤:
composer show --tree | grep guzzle
导出干净列表给脚本或运维用
需要一行一个 vendor/name version 的纯文本格式,用 --installed --no-ansi 最稳:
composer show --installed --no-ansi
-
--installed强制只输出已安装的包(跳过composer.json里写了但没install的) -
--no-ansi去掉颜色和格式控制符,适合粘贴到文档或脚本解析 - 如果只要包名和版本号,
composer show -i(等价于--installed)配合cut也行:composer show -i | cut -d' ' -f1,2 -
composer show --format=json适合自动化解析,但返回的是每个包的元信息(如name、version、require),不是扁平列表,解析成本略高
真正容易被忽略的是:命令行为高度依赖 composer.lock 的完整性,而不是 vendor/ 目录本身。删了 lock 文件又没 run install,composer show 可能反映的是 composer.json 的声明而非实际安装状态——这种边缘情况,ls vendor/ 才是最原始、最不可绕过的验证手段。

















