suggests 是纯提示性字段,仅输出建议信息且不参与依赖解析;recommends 自 Composer 2.2 起支持版本约束和 --with-recommends 启用安装,语义更强、更结构化。

Composer 的 suggests 和 recommends 都是 composer.json 中用于表达“推荐依赖”的字段,但它们的语义强度、安装行为和用途完全不同。
suggests:轻量级提示,纯信息性
suggests 是一个完全可选的、不参与依赖解析的字段。它只在 composer install 或 composer update 完成后,以提示形式输出给用户(比如“建议安装某包以启用 XX 功能”),但不会触发任何自动安装或版本约束检查。
- 不强制安装,不检查是否已存在,也不影响依赖图
- 值为键值对:
"vendor/package": "说明文字" - 常见于扩展能力提示,例如
monolog/monolog会 suggestaws/aws-sdk-php(用于 S3 日志)
recommends:有条件推荐,带版本约束
recommends 字段在 Composer 2.2+ 引入,比 suggests 更进一步:它声明“如果满足某些条件,建议安装这个包”,并支持版本约束和可选的 reason 说明。但它仍不会自动安装——除非你显式启用 --with-recommends 选项。
- 默认不安装,但可通过
composer install --with-recommends主动启用 - 支持版本约束(如
"phpunit/phpunit": "^9.5 || ^10.0") - 可附加理由字段:
{"phpunit/phpunit": {"version": "^9.5", "reason": "用于运行测试"}} - 适用于功能增强型依赖,比如一个 HTTP 客户端推荐 cURL 扩展或
guzzlehttp/psr7
实际使用建议
选 suggests 当你只想友好提醒;选 recommends 当你希望提供带约束的、可一键启用的推荐组合。注意:recommends 不会覆盖 require,也不改变包的必需性——它只是让“推荐”这件事更结构化、更可控。
不复杂但容易忽略:很多开发者只用 suggests,其实 recommends 在构建模块化工具库时更能提升用户体验。










