Composer 没有官方 suggests 命令,运行会报错“Command 'suggests' is not defined”;真实查看方式是 composer show vendor/package 或解析 installed.json 和根 composer.json。

Composer 没有 composer suggests 这个命令,运行它一定会报错:Command "suggests" is not defined。 所有声称“官方提供 composer suggests 命令”的说法都是错误的——截至 2026 年 4 月,Composer 官方从未实现或发布该子命令。
为什么 composer suggests 会报错
Composer 的命令系统里压根不存在 suggests 子命令。你看到的所谓“composer suggests laravel/framework”输出,要么是误传的截图,要么是第三方插件(如 boekkooi/composer-suggest-plugin)伪造的命令行为。官方 composer list 输出中永远找不到它。
- 真实错误信息是:
Command "suggests" is not defined. - 根本原因:Composer 核心只解析
composer.json中的require、require-dev、autoload等字段,suggests字段仅用于终端提示,不参与命令注册 - 某些文档或博客把插件行为当成官方功能,导致开发者白折腾权限、重装 Composer、查错半天
真正能用的查看方式:用 composer show 查单个已安装包
composer show vendor/package 是唯一可靠、无需插件、官方支持的查看 suggests 内容的方式——但前提是该包必须已安装(即出现在 vendor/ 或 composer.lock 中)。
- 执行
composer show monolog/monolog,输出末尾会出现类似:suggests: aws/aws-sdk-php (Allow sending logs to AWS services like CloudWatch) - 如果包没装过,
composer show直接报Package not found,不会回退去查 Packagist 元数据 -
composer show --all列出所有可用版本,但不显示suggests字段——它只对已安装包生效 - 想查自己项目根目录的
suggests?直接打开项目根composer.json,找"suggest"键即可
批量提取所有已安装包的 suggests 字段
没有现成命令,但可借助 vendor/composer/installed.json(Composer 自动维护)快速提取,一行 PHP 脚本足够:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
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\"; } }"这个脚本只读本地文件,不联网、不依赖插件、不修改任何东西。注意:
- 它只遍历已安装的包,不会包含未 require 但 lock 文件里有的包(那些在
composer.lock的packages-dev或未安装分支里) -
installed.json不含根项目的suggests,只含 vendor 包的元信息 - 若想同时看根项目 + 所有 vendor 包的
suggests,得合并读取根composer.json和installed.json
--no-suggest 只影响输出,别指望它控制安装逻辑
--no-suggest 是 composer install 和 composer update 的合法选项,但它干的事非常有限:仅跳过终端最后那段灰色文字提示(比如 Suggested packages: - ramsey/uuid: Needed to generate UUIDs...)。
- 它不改变依赖解析、不跳过任何包安装、不影响
composer.lock内容、不屏蔽vendor/下的文件生成 - CI/CD 中加
--no-suggest是合理优化,避免日志被无关提示刷屏;但在本地开发时关掉它,反而容易漏掉关键扩展提醒(比如ext-redis缺失导致缓存失败) - 不存在
--install-suggests或类似开关——Composer 故意不提供自动安装建议包的能力,这是设计选择,不是遗漏
最常被忽略的一点:suggests 字段只在你项目的根 composer.json 中生效并输出,依赖包自身的 suggests 不会递归合并或显示。也就是说,即使 monolog/monolog 在它自己的 composer.json 里写了 "psr/log": "For logging interface",你在装了它的项目里也看不到这条提示——除非你手动 composer show monolog/monolog。

















