composer search 命令在 composer 2.2+ 中已被彻底删除,因 packagist 自2022年底关闭搜索 api,官方移除该功能;现应改用 https://packagist.org/search.json 接口替代,并通过 composer show 等命令验证包可用性。

composer search 命令在 Composer 2.2+ 中已彻底删除,任何尝试运行它都会报错 Command "search" is not defined。这不是配置问题,也不是网络问题,而是 Packagist 自 2022 年底关闭搜索 API 后,官方主动移除的功能。
为什么 composer search 会报错或返回空结果
你敲下 composer search log 却看到报错,或在旧教程里看到它“能用”,是因为:
- Composer 2.2(2023 年发布)起,
search命令被硬编码移除,不再存在于二进制中 - 即使降级到 Composer 1.x,它也只查 Packagist 的静态快照,不支持分页、过滤,且仅返回前 10 条
- 它不支持模糊匹配:搜
logging不会命中monolog/monolog,但搜log可以——因为只做前缀匹配 - 国内用户常误以为是镜像源问题,其实根源是后端 API 已下线,换源也没用
现在该用什么替代?直接调 https://packagist.org/search.json
这是目前最轻量、稳定、无需额外安装的方案,Packagist 官方仍在维护该接口:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 基础搜索:
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}' - 没装
jq?至少加| head -n 20避免刷屏 - 国内建议加重试:
curl --retry 2 -s "https://packagist.org/search.json?q=queue" - 注意:该接口只返回前 10 条,不支持分页;想多看候选,得换关键词重试,比如从
pdf改成pdf generator或tcpdf
搜到包名后,必须立刻验证是否真能用
网页上热门 ≠ 你项目里能装。真实约束只有本地命令才能暴露:
- 确认存在且未废弃:
composer show monolog/monolog—— 成功返回说明包可用;失败则明确提示Package not found - 查所有版本(含未安装):
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
真正容易被忽略的点是:搜到包只是第一步,require 前必须交叉核对三件事——包页右上角的 abandoned 标签、require.php 版本约束、以及你当前环境是否启用了对应扩展(比如 ext-curl 对 guzzlehttp/guzzle 是刚需)。跳过这步,大概率在 CI 或新机器上卡住。










