应优先使用 Packagist.org 网站搜索而非 composer search,因其提供下载量、更新时间、PHP 兼容性、Star 数等关键信息;composer search 仅适合初筛已知包名,composer show 用于确认已安装包详情,查未安装包需加 --all 参数。

别用 composer search 当主力搜索工具
它查得窄、没版本、不显示 PHP 兼容性,连下载量和最近更新时间都没有。你输 composer search pdf,返回一堆包名和两行描述,根本没法判断哪个能跑在 PHP 8.2 上、哪个还在维护。这不是搜索,是关键词碰运气。
真正该做的:用它做初筛——比如你已经知道有个叫 spatie/pdf-to-text 的库,但不确定名字拼对没,或者想看看还有没有类似命名的变体,这时 composer search pdf text 或 composer search --only-name spatie 才有用。
- 多词组合是“与”关系,但别堆超过 3 个词,否则漏包
-
--only-name很关键,不然composer search laravel会把symfony/framework-bundle(描述里带 “laravel”)也塞进来 - 输出太长?立刻接
| grep -i "redis"或| less,别手动翻屏
查已知包详情必须用 composer show,但得会用
composer show 不是搜索引擎,它是“确认器”。不加参数只列已安装包;输错包名、漏 vendor、大小写不对,一律报 Package not found。
常见误操作:composer show cache 想找缓存相关包——没用,它只认全名或前缀,比如 composer show doctrine/cache 或 composer show psr/(匹配所有 psr 开头的已装包)。
- 查未安装但可用的包?必须加
--all:composer show --all | grep -i "cache" -
--all只列包名+简短描述,不带版本兼容信息——想看guzzlehttp/guzzle哪个版本支持 PHP 8.3?得指定全名:composer show guzzlehttp/guzzle - 查私有包?先确保
composer.json的repositories已配好,或临时用--repository https://your-satis.example.com/packages.json,URL 必须是合法 packages.json 地址,填 Git URL 会报Could not parse version constraint
Packagist.org 才是决策现场,不是辅助工具
搜索框输入 queue redis,结果页里那些不起眼的字段决定你下周是不是在修兼容性 bug:右上角的 Downloads/month、Last updated、PHP 版本约束(requires php: ^8.1)、GitHub star 数、是否有 open issues 标签。这些 composer search 和 composer show 都不提供。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
别跳过“Browse by type”或“Tags”筛选——比如搜 auth,点开 tag:laravel 就能过滤出 Laravel 官方适配的认证包,比命令行硬猜靠谱得多。
- 看到心仪包,直接复制页面上的
composer require vendor/package,别手敲,vendor 名大小写敏感 - 企业私有包?Packagist 不会显示,但你可以用它的 API:
curl "https://packagist.org/search.json?q=your-keyword",结果结构清晰,适合脚本解析 - 镜像源影响搜索速度,但不影响结果——阿里云、腾讯云镜像只是加速,底层数据仍来自 packagist.org
私有仓库优先级容易配反,一配错就装不到包
Composer 查包顺序是逆序遍历 repositories 数组:从最后一个仓库开始试,找到元数据就停,不再往前查。所以私有仓库必须放在数组末尾,packagist.org 得放前面兜底。
错误配置示例:"repositories": [{"type": "composer", "url": "https://my-private.example.com"}, {"type": "composer", "url": "https://packagist.org"}] —— 这样私有包永远被跳过,因为 Composer 先去 packagist.org 查,404 后直接报错,根本不会试第二个。
- 正确写法:私有源放最后,packagist.org 放第一个或中间
- 别删掉 packagist.org 声明以为“不用它了”——Composer 默认隐式启用,会导致私有包被绕过
- 最稳方案:显式禁用默认源
{"packagist.org": false},再手动加回 packagist.org 并控制位置
真正卡住人的从来不是找不到包,而是查到一个包后,发现它要求 PHP 8.4、依赖已废弃的 ext-apc、GitHub 最后一次 commit 是三年前——这些信息,命令行不告诉你,得靠 Packagist 页面右下角那一小块区域。

















