composer show -a 只显示已安装包的完整字段(含 source/dist),未安装包需指定包名如 composer show vendor/package -a 才能查远程信息;source 字段为空因默认用 dist,仅开发版或私有包等才可能有 source。

composer show -a 查不到远程仓库信息?先确认包是否已安装
执行 composer show -a 时,它只显示当前项目中已安装的包的详细信息(包括 source、dist、type 等),不会拉取未安装包的远程元数据。如果你刚加了 require 但还没 composer install,composer show -a 就根本看不到那个包。
- 已安装:会显示
source字段(如"type": "git", "url": "https://github.com/monolog/monolog.git", "reference": "...") - 未安装:直接不出现,或报错
Package not found - 想查未安装包的远程信息,得用
composer show vendor/package --all(注意加--all,且包名必须准确)
composer show --all 和 composer show -a 是一回事吗?
是的,-a 是 --all 的缩写,两者完全等价。但要注意:这个 --all 指的是「显示所有可用字段」,不是「显示所有包」——它仍只作用于已安装或明确指定的包,不会列出 packagist.org 上全部包。
-
composer show -a→ 显示所有已安装包的完整字段(含 source/dist) -
composer show monolog/monolog -a→ 即使该包未安装,也能查到其最新稳定版的远程信息(前提是 packagist 可访问) -
composer show -a不带包名时,若项目无依赖,输出为空;不是“没生效”,是真没东西可show
为什么 source 字段有时是 null?
Composer 默认优先使用 dist(zip/tar 包),只有在 config.prefer-stable: false 或显式要求开发版(如 "dev-main")时,才可能触发 source(即 git clone)。即使有 source,也取决于包作者是否在 composer.json 中声明了 source 部分。
- 多数稳定版包的
source字段为空,因为 packagist 生成的元数据默认只保留dist - 如果需要强制走 source,可临时加
--prefer-source,但下次composer install仍按配置来 - 某些私有包或本地 path repo 会始终显示
source,因它们绕过了 dist 分发机制
想看 GitHub 最新 commit 或 license 呢?show -a 不够用
composer show -a 输出的是 Composer 自己缓存/解析的元数据,不是实时抓取 GitHub API。它里面的 license 来自 composer.json,source.reference 是当时发布时打的 tag 或 commit hash,不代表 HEAD。
- 要看真实仓库最新状态,得手动打开
source.url字段里的链接,或用git ls-remote查 refs - 想自动化获取 license 文本?别指望
composer show—— 它不下载文件,只读元数据 - 遇到
source.url是https://api.github.com/...这种 API 地址?说明包注册时用了 GitHub 的自动发现,但实际 clone 地址还是https://github.com/xxx/yyy.git,需自己替换










