Composer fund命令是什么 查看开源项目赞助信息【科普】

10次阅读

composer fund 命令真实存在,是 Composer 2.2+ 内置命令,仅读取依赖包 composer.json 中的 funding 字段(数组格式),不识别 .github/FUNDING.yml;低于 2.2 版本会报错“Command not defined”。

Composer fund命令是什么 查看开源项目赞助信息【科普】

composer fund 命令到底存不存在?

composer fund 是 Composer 2.2+ 官方内置命令,真实存在且开箱可用,不是插件、不是提示语、也不是误传的别名。但它的行为常被混淆:它不等同于安装时的 funding 提示,也不等于 composer show 中自动显示的 FUNDING.yml 内容。

关键区别在于数据来源:

  • composer fund 只读取各依赖包 composer.json 中声明的 funding 字段(数组格式)
  • composer show vendor/package 末尾显示的 funding: 行,可能来自 .github/FUNDING.yml(v2.2+ 支持),与 composer.json 里的 funding 字段无关
  • 两者互不干扰,可共存,也可只存在其一

如果你运行 composer fund 报错 Command "fund" is not defined,说明 Composer 版本低于 2.2 —— 这是唯一合理的报错原因。

怎么用 composer fund 查出真正能点的赞助链接?

执行命令本身极简单:composer fund,但它是否“有结果”,完全取决于你项目里哪些依赖包在自己的 composer.json 中写了合规的 funding 字段。

常见有效配置示例(必须是数组,每个元素含 typeurl):

"funding": [   { "type": "github", "url": "https://github.com/sponsors/twigphp" },   { "type": "opencollective", "url": "https://opencollective.com/symfony" } ]

运行后终端会输出类似:

monolog/monolog → https://github.com/sponsors/Seldaek symfony/console → https://symfony.com/sponsor

注意:

  • 链接默认是纯文本;若终端支持(如 windows Terminal、iTerm2),点击即可打开浏览器
  • 不支持批量跳转,但可用 composer fund | awk '{print $3}' | xargs -n1 openmacOS/linux)辅助
  • 没出现在列表里的包 ≠ 不能赞助,只是没填 funding 字段(比如很多包只放了 .github/FUNDING.yml

为什么有些包明明有 GitHub Sponsors 却不显示?

这是最常踩的坑:把 .github/FUNDING.ymlcomposer.jsonfunding 字段当成一回事。

  • composer fund 完全忽略 .github/FUNDING.yml
  • 它只扫描已安装包的 vendor/*/composer.json 文件,并严格匹配 "funding"
  • 即使包仓库里有 .github/FUNDING.yml,只要 composer.json 没写 fundingcomposer fund 就不会列出它

验证方式很简单: composer show monolog/monolog | grep funding
如果输出空,说明该包没在 composer.json 里声明 funding,哪怕它的 GitHub 主页挂着 Sponsors 按钮也没用。

想支持某个包但它没出现在 fund 列表里,还能怎么办?

别急着换包,先确认它是否提供了其他公开入口:

  • 运行 composer show vendor/package,看 source 字段指向哪个 GitHub/gitlab 仓库,然后手动访问其 .github/FUNDING.yml(路径如 https://www.php.cn/link/0b080540f817dd397faae9a6029d7eb3
  • 检查 composer.jsonsupport 区域,有些作者把链接放在 support.emailsupport.docs
  • 运行 composer thanks vendor/package —— 如果包配置了 extra.thanks,它会帮你跳转到上游维护者页面(比如 webpack Encore → Symfony)

真正容易被忽略的是:资助信息的可见性,不取决于工具多强大,而取决于包作者是否主动填写了那一段 JSON。Composer 只负责读,不负责补全、不校验、不提示缺失。

text=ZqhQzanResources