如何使用Composer fund命令查看开源项目资助信息(及如何隐藏它)?

16次阅读

composer 有 fund 命令但限制严格:仅当项目依赖中显式声明 funding 字段、已完整安装且使用 Composer 2.2.0+ 时才生效,多数包未填写故常无输出。

如何使用Composer fund命令查看开源项目资助信息(及如何隐藏它)?

Composer 没有 fund 命令——这是个常见误解。官方 Composer(v2.0+)确实提供了 composer fund,但它不是用来“查看开源项目资助信息”的通用工具,而是仅在当前项目依赖中**显式声明了 funding 信息**时才生效,且行为高度受限。

为什么 composer fund 经常不显示任何内容?

该命令只检查 composer.jsonfunding 字段(顶层或依赖包的 composer.json),且仅当满足全部条件时才输出:

  • 你的项目已通过 composer installcomposer update 完整加载依赖(即 vendor/composer/installed.json 存在且含完整元数据)
  • 至少一个已安装的依赖包在其 composer.json 中定义了非空的 "funding" 数组(如 {"type": "github", "url": "https://github.com/sponsors/xxx"}
  • 你运行的是 Composer 2.2.0+(早期 v2 版本支持不完整,v1 完全无此命令)

绝大多数包并未填写该字段,所以执行 composer fund 后常为空白或仅提示 No funding information found.

如何手动查某个包的资助链接(比 fund 更可靠)?

直接读取包自身的 composer.json 最准,因为 composer fund 不解析 GitHub/gitlab 的 Sponsors 设置,也不抓取 OpenCollective 页面:

  • 进入 vendor/{vendor}/{package}/composer.json,查找 funding 字段
  • 或用命令快速提取:
    php -r "$j=json_decode(file_get_contents('vendor/symfony/console/composer.json'), true); echo $j['funding'][0]['url'] ?? 'none';"
  • 若字段为空,去 GitHub 主页看 Sponsor 按钮(它由仓库设置驱动,与 Composer 无关)

如何让 composer fund 不输出任何资助信息(隐藏)?

没有官方“关闭”开关,但可通过以下方式实质禁用其输出:

  • 删掉本地所有依赖的 funding 字段:运行
    find vendor -name composer.json -exec sed -i '/"funding":/d' {} ;

    linux/macOS;windows 需用 PowerShell 替代)

  • 降级到 Composer 2.1.x 或更低——这些版本要么无该命令,要么默认静默(但不推荐,有安全风险)
  • 重定向输出:composer fund >/dev/null 2>&1,但这只是掩盖,不改变行为

注意:funding 字段本身是可选的元数据,不参与依赖解析或安装逻辑,删除它不会影响功能,但会丢失作者提供的资助入口。

真正容易被忽略的是:Composer 的 funding 机制完全依赖包维护者主动填写,且只认 JSON 字段——它不自动对接 GitHub Sponsors、OpenCollective API 或任何第三方平台。想支持作者,最稳的方式仍是手动访问其主页的赞助链接,而不是指望 composer fund 能“发现”什么。

text=ZqhQzanResources