composer show 默认只显示顶层依赖,非全部已安装包;需加 --tree 查完整依赖树、--installed 导出已安装列表,因其仅解析 composer.lock 中的顶级 packages 字段,跳过间接依赖。
composershow 默认只显示你手动 require 的包,不是全部已安装的——想看完整列表,必须加或。
为什么
输出那么少?
它默认只读
里的顶层
字段,跳过所有间接依赖(比如
被
拉进来,就不会出现)。这不是 bug,是设计如此。
没运行过
或
的项目,
会报错或为空——它依赖
或有效的
被删了?那所有
命令都会失效,它不回退到锁文件做推测
包名大小写敏感:
和
是两个不同包,输错就返回
查完整依赖树:用
,别靠肉眼拼
只有
能还原真实安装结构,它递归读取
中记录的嵌套
,输出带缩进和箭头的层级关系。
示例输出片段:
如果用了
,
里的包(如
)不会出现在
结果里
终端宽度不够时长包名会被截断,建议加
或重定向:
导出干净列表给运维或 CI 用
别手写脚本去解析
——格式在 Composer 2.x / 3.x 间不稳定;用
自带的输出更可靠。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
导出纯文本全量列表(含版本,无颜色):
只导出你亲手写的依赖(排除所有子依赖):
要带路径、autoload 等详细信息?加
,但注意这会包含
绝对路径,不适合跨环境分享
查全局包别用
,换
完全无视全局配置,哪怕你在
下执行,它也只扫当前项目的
。全局包得用专用命令。
查是否真装了
:
,不是
只看自己手动
的包(排除自动拉进来的依赖):
输出太长?加
只留包名:
最常被忽略的一点:没有
目录时,所有
变体都失效——它不尝试重建、不 fallback、不提示“你可能需要先 install”,就直接沉默或报错。
--tree--installedcomposer showcomposer.lockpackagesmonolog/monologsymfony/consolecomposer installcomposer updatecomposer showvendor/composer/installed.jsoncomposer.lockvendor/composer showsymfony/consoleSymfony/ConsolePackage not found--tree--treevendor/composer/installed.jsonrequiressymfony/http-kernel v6.4.7 └── symfony/event-dispatcher v6.4.3 └── psr/event-dispatcher ^1.0composer install --no-devrequire-devphpunit/phpunit--tree| less -Scomposer show --tree > deps.treecomposer.lockcomposer showcomposer show --installed --no-ansicomposer show --direct --format=plain--verbosevendor/composer showcomposer global showcomposer show/tmpvendor/laravel/installercomposer global show laravel/installercomposer show laravel/installerglobal requirecomposer global show --direct--name-onlycomposer global show --name-onlyvendor/composer show