composer search 命令在 Composer 2.2+ 中已被官方永久移除,因 Packagist 自2022年底关闭搜索 API;替代方案是用 curl 调用 https://packagist.org/search.json?q=关键词 或结合 composer show 验证包可用性。

composer search 命令在 Composer 2.2+ 中已彻底移除,任何尝试运行它都会报错 Command "search" is not defined。别再查旧教程、别降级 Composer、也别装第三方脚本——它就是没了。
为什么 composer search 会报错
这不是网络问题、镜像配置错误或拼写失误。Packagist 自 2022 年底关闭了搜索 API 后端,Composer 官方在 2.2 版本(2023 年发布)中直接删除该命令。即使你用 Composer 1.x,返回结果也仅限前 10 条、无分页、不支持过滤,实际不可靠。
常见误判包括:
- 把
composersearch(无空格)当成合法命令 - 以为加
--only-name或--type=library还能用——这些参数早已随命令一并消失 - 在国内网络环境下反复重试,却没意识到根源是 API 已下线,不是“连不上”
现在怎么快速找包:用 curl 直调 Packagist 搜索接口
Packagist 的公开 JSON 接口 https://packagist.org/search.json?q=关键词 仍在稳定运行,是目前最轻量、最准的替代方案。
实操建议:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 基础搜索:
curl -s "https://packagist.org/search.json?q=cache" - 带格式化输出(需安装
jq):curl -s "https://packagist.org/search.json?q=log" | jq '.results[] | {name: .name, desc: .description}' - 没装
jq?至少加| head -n 20避免刷屏 - 国内用户建议加重试:
curl --retry 2 -s "https://packagist.org/search.json?q=redis"
注意:search.json 接口只返回前 10 条结果,不支持分页。想多看几个候选,只能换词重试,比如从 queue 改为 redis queue 或 amqp client。
搜到包名后必须立刻验证:别跳过 composer show
curl 返回的只是名字和描述,不能说明它能在你项目里装得上。真实兼容性必须本地验证:
- 确认包是否存在且未废弃:
composer show monolog/monolog—— 成功返回说明可用;失败则明确提示Package not found,大概率是包名大小写错误或拼错了 vendor 名 - 查所有可用版本(含未安装):
composer show --all monolog/monolog,但注意它不显示每个版本的 PHP 要求 - 模拟安装,提前暴露硬性冲突:
composer require --dry-run phpunit/phpunit:^9,能立刻发现 PHP 版本不兼容、缺失ext-gmp等扩展、或依赖循环 - 私有包?必须显式指定源:
composer show --repository https://your-satis.example.com/packages.json myorg/private-lib,URL 必须是合法的 packages.json 地址,填 Git URL 会报Could not parse version constraint
真正高效的做法是双线并行:命令行初筛 + Packagist 网页定案
命令行只负责快速拉出候选包名,网页才提供决策所需全部信息:
- 网页搜索支持全文检索(README、tags、description 全字段)、按 PHP 版本/下载量/更新时间/是否
abandoned过滤 - 包页右上角的红色
This package is abandoned标签,composer show根本不显示 - 点进包页一眼看到
requires字段是否含你环境里没启用的扩展(如ext-igbinary),或最低 PHP 版本是否高于你当前环境 - 别信下载量数字——有些高下载量包(如
psr/log)是被其他包间接 require 的,本身不供人直接安装
最常被忽略的一点:复制网页上的包名时,容易粘贴出多余空格或错误斜杠(如 symfony/ console),composer show 会立刻失败。务必手动核对 vendor 和 name 之间是单个 /,且无空格。

















