composer search 命令自 Composer 2.2(2023 年发布)起被官方永久移除,因 Packagist 自 2022 年底关闭搜索 API,执行即报错“Command 'search' is not defined”,唯一可靠替代是调用 https://packagist.org/search.json?q=关键词。

composer search 命令在 2026 年已彻底不可用
直接告诉你结果:composer search 命令从 Composer 2.2(2023 年发布)起已被官方永久移除,Packagist 自 2022 年底关闭搜索 API 后,该命令就再无后端支撑。你现在执行它,只会看到明确报错:Command "search" is not defined。这不是配置问题、镜像问题或拼写问题,是功能被删了。
搜不到包?不是关键词没选对,是命令本身不存在
旧教程里写的 --only-name、-t library、"laravel scout" 这类用法,全部失效。Composer 当前任何稳定版本(包括 2.5.x、2.6.x)都不识别这些参数,也不会返回任何包列表。你看到的“搜到结果”,大概率是:
- 误用了已弃用的第三方脚本(如
composersearch),它们无法对接当前 Packagist 接口 - 本地还残留着 Composer 1.x 环境(极不推荐),但返回结果极简、无分页、不支持过滤,且数据早已过期
- 把
composer show -a或composer depends误当成搜索命令
替代方案:用 curl + Packagist JSON 接口查包
目前唯一轻量、可靠、官方维持的搜索方式,是直调 Packagist 的公开搜索接口:
基础用法:curl -s "https://packagist.org/search.json?q=redis"
加 jq 格式化输出(推荐):curl -s "https://packagist.org/search.json?q=log" | jq '.results[] | {name: .name, desc: .description}'
注意几个硬限制:
- 结果固定最多 10 条,不支持分页、不支持排序(无热度/更新时间字段)
- 只匹配包名和 description 字段的前缀,不支持通配符、正则或空格短语(
"cache redis"是两个独立词 AND 匹配) - 国内用户建议加重试:
curl --retry 2 -s "https://packagist.org/search.json?q=pdf" - 想确认某个包是否真可用、有哪些版本、require 什么依赖?必须换用单包接口:
curl -H"User-Agent: MyApp/1.0" https://packagist.org/packages/monolog/monolog.json
真正卡点:搜到 ≠ 能用,别跳过验证环节
即使接口返回了 laravel/sanctum,也不代表你能直接 composer require 成功。最容易被忽略的三件事:
- 包名大小写敏感:API 返回
laravel/sanctum,但你写成Laravel/Sanctum就会报Package not found - PHP 版本或扩展缺失:API 不校验
php或ext-gmp是否满足,装完才发现运行时报错 - abandoned 状态不提示:API 返回字段含
abandoned: true,但默认不显示;不手动看这个字段,可能把已弃用包当主力引入











