composer search 命令在 2.2+ 版本中已被彻底删除,因 packagist 自 2022 年底关闭搜索 api;替代方案是用 curl + jq 调用其公开 api,或用 composer show 验证包存在性。

Composer search 命令在 2.2+ 版本中已彻底删除,执行必报 Command "search" is not defined —— 不是配置问题,不是网络问题,就是没了。
为什么 composer search 会报错或返回空
Packagist 官方自 2022 年底关闭搜索 API,Composer 2.2(2023 年发布)起直接移除该命令。你看到的错误是代码层删除的结果,不是临时禁用,也没有回滚路径。
- 降级到 Composer 1.x 也无效:旧版依赖的后端服务早已下线,返回结果不可靠
-
composersearch(无空格)、composer search -h、--only-name全部无效 - 镜像源、缓存、权限、
repositories配置都与此无关——命令本身不存在了
替代方案:用 curl + jq 调 Packagist 搜索 API
这是目前最接近原生 search 行为的命令行方式,适合快速筛选或脚本调用:
curl -s "https://packagist.org/search.json?q=log" | jq '.results[] | {name: .name, desc: .description}' | head -n 20
- 关键词用空格分隔(如
q=cache redis),语义是“同时出现在同一字段”,不支持OR、NOT或通配符 - 必须加
| head -n 20,否则可能刷屏几百条结果 -
jq需提前安装:brew install jq(macOS)、apt install jq(Ubuntu) - 注意:这个请求走公网,不经过任何镜像源,响应速度取决于你直连
packagist.org的质量
更可靠的做法:用 composer show 验证包是否存在
composer show 不是搜索命令,但它能告诉你当前环境「真实可用」的包:
- 查具体包:
composer show monolog/monolog—— 成功返回说明包存在、未废弃、有兼容版本 - 模糊匹配前缀:
composer show monolog(不带斜杠)可命中monolog/monolog,但composer show log不会匹配 - 它读的是本地缓存元数据,受镜像源影响;执行前确保已
composer clear-cache并用composer config repo.packagist.org确认镜像生效
镜像配置必须对,但只对 install/update 有效
search 已消失,镜像再快也没用;但如果你还在用 show 或后续操作,镜像配置必须严格正确:
- 键名必须是
repo.packagist.org(不是repos.packagist、repo.packagist或其他变体) - URL 必须以
/结尾:https://mirrors.aliyun.com/composer/✅,少斜杠会 404 导致静默降级 - 验证命令:
composer config repo.packagist.org,输出应为完整 JSON;报错则说明走官方源 - 改完必须
composer clear-cache,否则仍读旧缓存里的packages.json
最容易被忽略的是:Composer 对镜像 URL 完全不校验格式与可达性,错配了也不会提示,直到 update 卡住才暴露。每次改完,先跑一次 composer config repo.packagist.org 再试 show。











