真正高效的做法是命令行+Packagist网站双线并行:composer search仅用于初筛包名,不提供版本、兼容性、下载量等关键信息;composer show用于查已知包详情;最终决策须依赖Packagist官网查看下载量、更新时间、PHP约束及GitHub活跃度。

直接结论:别只用 composer search 找新包,它查得窄、不带版本、没下载量和维护状态;真正高效的做法是命令行 + Packagist 网站双线并行,且每一步都有明确分工。
用 composer search 快速筛出候选包名
这个命令本质是 Packagist 的轻量 CLI 接口,适合已知功能关键词时快速拉出一串包名。但它不返回版本号、PHP 兼容性、是否稳定,也不展示下载量或最近更新时间。
- 单关键词最常用:
composer search cache、composer search pdf,大小写不敏感,但不支持通配符(log*会报错) - 多词组合是“与”关系:
composer search http client比composer search http更聚焦,但别堆太多词,否则可能漏掉命名不规范的包 - 加
--only-name避免误匹配描述:composer search laravel --only-name不会把symfony/framework-bundle这类描述里带 “laravel” 的包也拉进来 - 输出过长时立刻接
| less或| grep -i,比如composer search queue | grep -i "redis"
用 composer show 查已知包的完整信息,不是用来“搜索”
composer show 默认只列当前项目已安装的包,它不是搜索引擎——输 composer show log 基本等于白敲。它的正确用法是确认某个具体包的细节。
- 查已安装包详情:
composer show monolog/monolog显示当前装的版本、依赖、autoload 配置 - 查所有可用版本(含未安装):
composer show --all monolog/monolog,但注意:它不显示每个版本的 PHP 要求,只列版本号列表 - 想筛“带 cache 的包”?不能靠
show,得先用composer show --all | grep -i cache,但这只返回包名+简短描述,没有版本上下文 - 私有包必须提前配置
repositories,否则composer show --all根本看不到;临时查要用--repository指定 JSON 地址,填 Git URL 会直接报Could not parse version constraint
在 Packagist.org 上做最终决策,而不是命令行
命令行负责“初筛”,Packagist 网站负责“定案”。搜索结果页里那些不起眼的字段,恰恰决定你后续踩不踩坑。
- 优先看 “Downloads / month” 和 “Last updated”:下载量低 + 半年没更新 = 高风险
- 点进包详情页后,重点扫
require段里的php版本约束,比如"php": "^8.0"表示不兼容 PHP 8.2+ 的某些特性(如只读类),别光看 latest stable 版本号 - 翻到 “Source” 链接,跳转 GitHub 后快速看 Issues 里有没有大量 open 的 bug 或 compatibility 问题,Recent Commits 是否活跃
- 用网站高级搜索语法过滤:
type:library requires:psr-7、tag:laravel,这些命令行不支持
定位某个类属于哪个包:别猜,去 autoload_classmap.php 查
当你看到一个类(比如 League\Flysystem\Local\LocalFilesystemAdapter)却不知道它来自哪个包时,composer search 和 composer show 都是绕远路。
- 最准路径:
grep -n "LocalFilesystemAdapter" vendor/composer/autoload_classmap.php,结果里那一行的路径前缀(如'league/flysystem')就是包名 - 如果没搜到,说明这个类是 PSR-4 动态加载的,此时去
vendor/下按命名空间逐层翻文件夹,或者查对应包的composer.json里autoload.ps4配置 -
composer why只能告诉你“谁依赖了这个包”,不能回答“这个类是谁提供的”——顺序不能反
最容易被忽略的一点:Packagist 搜索结果的排序逻辑是相关性,不是质量。一个刚上传、0 下载、3 天没更新的包,只要 description 里塞满关键词,就可能排在 Monolog 前面。所以别信默认排序,手动按下载量或更新时间重排,再点进去看。











