composer如何查看包的funding信息_composer支持开源作者捐赠【支持】

6次阅读

composer 没有 funding 命令,官方仅短暂支持过 composer fund(单数),但 2.7+ 版本已移除;当前最可靠方式是 composer show,它自动读取包仓库的 .github/funding.yml 并显示资助链接。

composer如何查看包的funding信息_composer支持开源作者捐赠【支持】

composer fund 命令到底有没有?别被名字骗了

Composer 没有 funding 命令,也不存在 composer funding;官方唯一支持的是 composer fund(注意是单数 fund),但它在 Composer 2.7.x 及之后版本中已被移除或未定义——执行会报错:Command "funding" is not definedCommand "fund" is not defined。这不是你装错了,是它真没了。

  • Composer 2.2–2.6.x 确实短暂提供过 composer fund,但行为极不稳定:只读 vendor/*/composer.json 中的 funding 字段,且要求依赖已完整安装、字段格式严格、Packagist 缓存同步及时
  • 从 2.7 开始,该命令被官方弃用,文档中已删除,CLI 不再注册
  • 如果你看到别人跑出 composer fund 输出,大概率是他们卡在 2.5.x 或用了自定义插件,不是通用能力

真正能用的:composer show + .github/FUNDING.yml

composer show 是目前最可靠、全版本兼容(≥2.2)的方式,但它不靠命令行开关,而是自动识别包仓库根目录下的 .github/FUNDING.yml 文件——这个文件由 GitHub 平台驱动,和 Composer 无关,但 Composer 会主动读取并追加到输出末尾。

  • 运行 composer show monolog/monolog,若该包仓库存在有效的 .github/FUNDING.yml,你会在输出底部看到类似:funding:

    https://github.com/sponsors/Seldaek

  • 这个机制不依赖包作者改 composer.json,只要他们开了 GitHub Sponsors 并提交了 FUNDING.yml,就自动生效
  • 注意:composer show 默认显示 Packagist 缓存的元数据,不是本地 vendor 里的文件;如需查本地修改(比如你 fork 后加了 funding),得加 -s 参数:composer show -s monolog/monolog

手动查 funding 字段?别只看 vendor/composer.json

很多教程让你直接翻 vendor/{vendor}/{package}/composer.jsonfunding 字段,这容易误判——因为 Composer CLI 显示的 funding 来源有两个,且优先级不同:

  • 高优先级:包仓库的 .github/FUNDING.ymlcomposer show 会读)
  • 低优先级:包自己的 composer.json 根级 funding 数组(必须是 [{"type":"github","url":"..."}] 格式,写错位置、大小写、URL 缺协议都会静默忽略)
  • 常见坑:funding 写在 extra 里、写成 Funding、URL 是相对路径(如 sponsors/foo)→ Composer 完全不认
  • 验证是否生效:去 Packagist 页面打开对应包,看右栏 “Funding” 是否有链接——那里显示的是 Packagist 抓取的结果,比本地文件更反映真实可见性

想批量查所有依赖的资助入口?脚本比命令更靠谱

别指望 composer fund 自动递归扫描或生成点击链接——它连 --dev 参数都不稳定。真要批量查,不如写个两行脚本解析 vendor/composer/installed.json

jq -r '.packages[] | select(.funding != null) | "(.name) (.funding[0].url)"' vendor/composer/installed.json

但这只读 composer.json 里的字段,漏掉 .github/FUNDING.yml。更全的做法是结合 GitHub API 查仓库是否存在 .github/FUNDING.yml,不过这就超出 Composer 职责了。

最常被忽略的一点:资助信息是否“可见”,根本不由你本地的 Composer 版本或命令决定,而取决于包作者是否提交了 .github/FUNDING.yml、是否在 GitHub 仓库设置里启用了 Sponsors、以及 Packagist 是否已完成同步——三者缺一不可。你敲再多遍 composer fund,它也不会变出来。

text=ZqhQzanResources