composer suggest 命令用于查看已安装包作者推荐的扩展,仅读取并打印 composer.json 中的 suggest 字段,不安装、不修改配置;该命令自 Composer 2.2 起内置,依赖作者手动填写,非强制字段,不影响依赖解析与自动加载。

composer suggest 命令能直接看到包作者推荐的扩展
它不是安装命令,也不改 composer.json,只是读取当前已安装包的 suggest 字段并打印出来——这是作者在 composer.json 里手动写的“你可能还需要这些”。
执行很简单:
composer suggest
注意:这个命令从 Composer 2.2 开始才内置,低于该版本会报错 Command "suggest" is not defined。老项目升级前先确认版本:composer --version。
为什么有些包没显示建议?
因为 suggest 是纯可选字段,作者不填就没有输出。常见情况包括:
- 包本身是独立工具(如
phpunit/phpunit),作者认为无需额外依赖 - 维护者没更新
composer.json,或觉得“用户自己知道要装啥” - 你装的是 dev 分支或 fork 版本,而
suggest只存在于稳定版的composer.json中
别指望它覆盖所有生态组合,它只反映作者主观推荐,不是依赖分析结果。
和 require / require-dev 的区别在哪
suggest 不触发自动安装,也不影响 autoloading、autoload-dev 或依赖解析。它和 require 完全无关:
-
require:硬依赖,缺失会导致composer install失败 -
require-dev:开发期依赖,测试/构建需要,不参与生产 autoload -
suggest:纯文本提示,连是否已安装都不检查,composer suggest只是 echo 出来
比如 monolog/monolog 会建议 aws/aws-sdk-php(用于 S3 日志),但你不装它,Monolog 照常运行,只是少个 handler。
想批量查某个包的 suggest 怎么办
composer suggest 默认查整个项目,没法指定包。但你可以临时进 vendor 子目录看原始定义:
cat vendor/monolog/monolog/composer.json | grep -A 5 '"suggest"
或者用更准的方式(需 jq):
jq -r '.suggest | to_entries[] | "\(.key) → \(.value)"' vendor/monolog/monolog/composer.json
注意路径中包名格式是小写+短横线,和 packagist.org 一致,不是命名空间风格;且 vendor 下目录名可能被重命名(比如加了 vendor-name/ 前缀),得先 ls vendor 确认。
这东西本质是作者留的便签,别当契约看。真要搭生态,还是得结合文档和实际场景判断——毕竟有人把 “you might also like vim” 都写进 suggest 里过。










