composer search 命令自 composer 2.5+(2023 年起)被彻底移除,因 packagist 关闭公开搜索 api 以遏制滥用;推荐用 https://www.php.cn/link/5d2e892c81e5fafc51ab0973879563a0 网页搜索 + composer require 安装,或用 composer show、curl 调用 json api 替代。

composer search 已被弃用,2023 年起 Composer 2.5+ 版本默认禁用该命令,直接运行会报错 Command "search" is not defined.。别折腾了,它真不能用了。
为什么 composer search 不再可用
Composer 官方关闭了对 Packagist 的公开搜索 API 支持,主因是滥用严重(大量爬虫、CI 频繁轮询),且官方更倾向引导用户使用网页端搜索和语义化依赖管理。不是你配置错了,也不是没装插件——是命令本身被硬性移除。
常见错误现象:composer search laravel-debugbar 执行后提示 Command "search" is not defined. 或 Call to undefined method Composer\Package\Version\VersionParser::parseLinks()(老版本残留插件冲突)。
- Composer 2.2 之前:命令存在但不稳定,结果常为空或超时
- Composer 2.3–2.4:开始警告弃用,部分安装可能仍能用(不推荐)
- Composer 2.5+(2023.07 起):彻底移除,无回退开关
替代方案:用 Packagist 网页搜索 + 命令行精准安装
实际开发中,你真正需要的从来不是“模糊搜包名”,而是“确认包是否存在、看最新版、查 require 写法”。网页搜索更快更准,再配合 composer require 直接上手。
- 打开 https://www.php.cn/link/5d2e892c81e5fafc51ab0973879563a0,搜关键词(如
csv reader) - 点进结果页,复制顶部的
composer require vendor/package-name命令 - 粘贴执行——它自动处理版本约束、autoload、依赖解析
- 想查某个包是否支持 PHP 8.2?直接看网页页脚的
PHP >=8.2标签,比命令行快十倍
如果非要命令行查包,用 composer show 或 curl 模拟 API
本地已有包?用 composer show 查细节;完全没装过但想确认存在?走 Packagist 的只读 JSON API 更可靠。
-
composer show monolog/monolog—— 查已安装或远程包的版本、描述、依赖 -
curl -s "https://www.php.cn/link/5d2e892c81e5fafc51ab0973879563a0search.json?q=phpunit" | jq '.results[0].name'—— 命令行快速取首个匹配包名(需装jq) - 注意:
composer show对未安装的包会触发远程查询,但不等价于搜索,它不支持模糊匹配多个关键词
别在 CI 脚本里写 composer search,也别找所谓“重启用插件”——那些要么失效,要么绕过安全限制,反而让 composer install 出现不可预测的网络失败。Packagist 网页搜索是唯一稳定、实时、带过滤和排序的入口,接受它就是最省时间的做法。










