composer 不提供直接查看 suggest 的独立命令,需用 composer show vendor/package-name 查看完整信息,其中 suggests: 段落即为该包 composer.json 中的 suggest 字段内容。

Composer 不提供直接查看某个包 suggest 字段的独立命令,但可以通过 composer show 查看完整包信息,其中包含 suggest 内容。
怎么用 composer show 看到 suggest
执行 composer show vendor/package-name(例如 composer show monolog/monolog)后,输出中会有一段以 Suggests: 开头的列表,里面就是该包在 composer.json 中声明的 suggest 项。
-
suggest不是依赖,不会自动安装,只是作者推荐的“搭配使用”组件 - 如果包没被 require 过,
composer show会报错Package vendor/package-name not found;得先composer require vendor/package-name --dry-run看一眼,或查 packagist.org 页面 - 想批量看当前项目所有已安装包的
suggest?没有内置命令,只能写一行 shell:composer show --installed | grep -A 10 "Suggests:"(注意输出格式不稳定,慎用于脚本)
suggest 字段在 composer.json 里长什么样
它是个对象,键是包名,值是字符串说明。比如:
"suggest": {
"ext-apcu": "For faster cache operations.",
"monolog/monolog": "Allows more advanced logging of the application flow."
}
常见误区:
- 把
suggest当成require-dev或conflict—— 它完全不影响安装逻辑和依赖解析 - 在 CI/CD 中检查
suggest是否满足 —— Composer 不校验、不提示、不报错,纯属文档性质 - 认为
suggest里的扩展(如ext-apcu)会被自动检测 —— 实际上只有require里的扩展才触发安装时检查
为什么有些包的 suggest 在 composer show 里不显示
两种典型情况:
- 包是通过
provide声明虚拟包(如psr/log-implementation),而suggest写在了被 provide 的包里,不是当前 installed 包的字段 - 你用的是
composer show -s(精简模式),它会过滤掉Suggests:等非核心字段;去掉-s才能看见 - 包的
composer.json根本没写suggest—— 很多包压根不填,别默认每个包都有
真正容易被忽略的是:即使你装了 suggest 里写的包,Composer 也不会在 composer update 时提醒你“现在可以启用某功能了”。它只是一段静态文本,藏在 JSON 里,等着人手动翻。










