composer 2.2+ 已彻底移除 composer search 命令,因 packagist 关闭搜索 api;推荐用 curl -s "https://packagist.org/search.json?q=xxx" 替代,配合 jq 或 head 提取结果,并用 composer show 和 --dry-run 验证包可用性。

composer search 命令已经彻底不能用了
不是你装错了、没配镜像、也不是网络问题——composer search 从 Composer 2.2 开始就被官方移除了,执行直接报错:Command "search" is not defined。Packagist 关闭了搜索 API,底层依赖也下线了,所有还在教用这个命令的旧文档或视频,现在都失效了。
- 别再试
composer search log或composer search --only-name cache,它不会工作 - 别怀疑自己是不是用了国内镜像导致失败——镜像源不提供搜索功能,只加速下载
- 别去 GitHub 上翻老版本 Composer 源码找补丁——官方明确废弃,无回滚计划
用 curl 直调 Packagist 搜索接口(最轻量可行方案)
Packagist 仍开放一个只读的公开搜索接口,返回 JSON,稳定、无需安装额外工具,适合快速查包名和描述。
- 基础命令:
curl -s "https://packagist.org/search.json?q=log" - 配合
jq提炼关键字段(推荐):curl -s "https://packagist.org/search.json?q=cache" | jq '.results[] | {name: .name, desc: .description}' - 没装
jq?用head -n 20看前几条原始结果也够判断:curl -s "https://packagist.org/search.json?q=http" | head -n 20 - 国内用户加重试防超时:
curl --retry 2 -s "https://packagist.org/search.json?q=pdf"
注意:API 默认只返回前 10 条,不支持分页;换词重试(比如加 client 或 library)比刷“下一页”更实际。
真正要装的包,得用 composer show 和 --dry-run 验证
搜到包名 ≠ 能在你项目里用。远程搜索不检查 PHP 版本、不看依赖冲突、也不标是否 abandoned。你最终敲的是 composer require,不是网页标题。
- 查包是否存在、是否活跃维护:
composer show monolog/monolog—— 成功返回即说明可用,失败明确提示Package not found - 模拟安装,暴露真实约束:
composer require --dry-run phpunit/phpunit:^9—— 不写入文件,但会解析全部依赖并报错(如 PHP 8.3 不兼容、symfony/console 版本冲突) -
composer show结果里重点看:requires php字段、time(Packagist 发布时间)、以及是否有abandoned标识
别信 Packagist 网页首页的“热门第一”
网站搜索看似直观,但开发中容易踩坑:
- 页面不显示
abandoned状态,点进去才发现作者三年没更新、Issues 全是 open - 显示所有历史版本,但你 PHP 是 8.3,它最新版只支持 8.1 —— 网站不会提醒
- 移动端复制包名常多空格或斜杠错位,比如把
symfony/console复制成symfony/ console,导致require报错 - Stars 数和下载量≠适合你:monolog 排第一是因为通用性强,但如果你只要一个单文件日志写入器,它就是过度设计
真要深度评估,打开包的 GitHub 仓库,看 Recent Commits 是否有近一个月的提交、Issues 是否有及时回复——比任何搜索结果都实在。










