composer本身不提供获取每个包最近版本发布者的原生命令,需联合composer show -f json与packagist api或github api查询:前者导出包名与版本,后者通过https://packagist.org/packages/{vendor/name}.json获取maintainers,或调用github /releases/latest接口获取真实tag发布者。

Composer本身不提供“获取每个包最近版本发布者”的原生命令
Composer 的 composer show 和 composer info 只能查包的当前安装版本、描述、依赖关系等元数据,不包含作者信息或发布者身份。所谓“最近版本发布者”,实际指该包在 Packagist 上最新 tagged release 的提交者(通常是 maintainer),但 Composer CLI 无对应字段输出。
用 composer show -f json + Packagist API 联合查询
可行路径是:先导出所有依赖的 name + latest stable version,再逐个调用 Packagist API 获取发布者。关键点在于:
-
composer show -f json输出的是当前 lock 文件中解析出的已安装包(含 version),但不含 dist reference 或 author 字段 - Packagist API 地址为
https://packagist.org/packages/{vendor/name}.json,返回 JSON 中package.maintainers数组包含 name/email,而package.versions["v1.2.3"].time和package.versions["v1.2.3"].source.reference可定位 commit,但发布者 ≠ commit author(tag 可由任意有权限者 push) - 真正可靠的“发布者”只能从 tag 的 GPG signature 或 GitHub/GitLab 的 release 页面获取,Packagist 不透传该信息
示例脚本片段(需 curl + jq):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer show -f json | jq -r '.packages[] | select(.type != "project") | "\(.name) \(.version)"' | while read pkg ver; do name=$(echo $pkg | sed 's|/|-|') url="https://packagist.org/packages/$pkg.json" maintainer=$(curl -s "$url" | jq -r '.package.maintainers[0].name // "unknown"') echo "$pkg@$ver → $maintainer" done
为什么不能只靠 composer outdated --direct
composer outdated --direct 只显示可升级的包及建议版本,不输出任何作者或发布者字段,且它依赖本地 lock 文件与 Packagist 元数据比对,无法追溯 tag 签发人。即使配合 --format=json,返回结构里也仅有 name、installed、latest 三字段,没有 author 相关键。
GitHub API 是更准的替代方案(但需额外 token)
若包源是 GitHub(绝大多数 PHP 包如此),直接查其 release API 更可靠:
- URL 格式:
https://api.github.com/repos/{vendor}/{name}/releases/latest - 响应中
author.login是真实发布者(GitHub 用户名),tag_name对应版本号 - 需注意 rate limit(未鉴权时 60 次/小时),建议加
-H "Authorization: Bearer YOUR_TOKEN" - 不是所有包都用 GitHub —— GitLab、Bitbucket 或私有 Git 仓库需分别适配 endpoint 和 auth 方式
容易被忽略的一点:Packagist 上显示的 “maintainers” 是包注册时填的长期维护者,和某次 release 的实际发布者可能完全不同;而 GitHub /releases/latest 返回的 author 才是那次 push tag 的人。两者语义不同,选哪个取决于你真正想问的是“谁长期负责”还是“谁刚发了新版”。










