Composer无suggests命令,查已安装包的suggests字段唯一官方方式是composer show vendor/package;项目根composer.json的suggest键需手动查看;批量提取须解析vendor/composer/installed.json。

Composer 没有 composer suggests 命令,运行就会报 Command "suggests" is not defined。所有“一键查看建议包”的说法,要么是混淆了插件行为,要么是误读文档。
怎么查已安装包的 suggests 字段
唯一官方支持、零依赖的方式是 composer show vendor/package。它会输出包的完整元信息,末尾的 suggests: 区域就是作者写的提示。
- 必须是已安装包(出现在
vendor/或composer.lock中),否则直接报Package not found - 不支持通配符或模糊匹配,
composer show monolog/*会失败 - 若想查多个包,得逐个执行;
composer show --all不显示suggests
怎么查自己项目根 composer.json 的 suggests
别绕路,直接打开项目根目录下的 composer.json,找 "suggest" 键就行。这是你主动声明的建议项,和第三方包无关。
- 格式必须是合法 JSON 对象,例如:
"suggest": {"phpunit/phpunit": "For running tests"} - 该字段不影响安装逻辑,只是给人看的,
composer install完全忽略它 - 如果用了
composer require但没写进require或require-dev,那这个suggest就纯属摆设
批量提取所有已安装包的 suggests(无插件)
靠脚本读 vendor/composer/installed.json 最稳——它由 Composer 自动维护,不联网、不依赖任何插件。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
php -r "\$i = json_decode(file_get_contents('vendor/composer/installed.json'), true); foreach (\$i as \$pkg) { if (isset(\$pkg['suggest'])) { echo \"\n\$pkg[name]:\n\"; foreach (\$pkg['suggest'] as \$s => \$desc) echo \" \$s → \$desc\n\"; } }"
- 只遍历真正安装进
vendor/的包,不会包含composer.lock里存在但未安装的包 - 路径硬编码在脚本里,不能用
__DIR__或getcwd()替代,否则在某些 CLI 上下文会失效 - 输出是纯文本,适合 grep 或重定向到文件做后续分析
boekkooi/composer-suggest-plugin 能信吗
它确实能在 composer install 时弹出交互式提示,但不是“自动装建议”,而是让你手动选。它的作用边界很窄,且容易被忽略几个关键限制:
- 插件本身必须加进
require-dev,且版本要锁死(如"boekkooi/composer-suggest-plugin": "^2.2"),否则 Composer 2.5+ 某些小版本会静默失效 - 它只提示,不写入
composer.json—— 你点了y,包会被拉下来,但下次composer install --no-dev或 clean 环境重装,提示还会再来一遍 - 它不解决兼容性问题:建议包可能要求特定主包版本,比如
spatie/laravel-ignition只兼容^1.0,但插件不会校验,装错就报错
真正容易被忽略的是:有些包的 suggests 字段其实已经过时了——作者没更新,但实际功能已被主包吸收或废弃。别只盯着字段存在就装,先看对应包的 README 和最近 release note。










