composer 没有 fund 命令,运行会报错“command ‘fund’ is not defined”;该命令从未被官方集成,误解源于 github 的 funding.yml 文件、仓库“sponsor”按钮及个别第三方插件;真正支持资助信息的是 composer.json 的 funding 字段(自 2.2 起),但需手动查看或用脚本解析,且字段非强制、结构不统一。

Composer 没有 fund 命令——这是最常被误解的一点。你运行 composer fund 会直接报错:Command "fund" is not defined.,因为该命令从未被 Composer 官方核心集成过。
为什么有人以为 composer fund 存在?
这个误解主要来自两方面:
- GitHub 的
Funding文件(FUNDING.yml)和仓库右上角的 “Sponsor” 按钮,让人误以为包管理器层面也支持统一资助查询; - 某些第三方插件(如
hirak/prestissimo旧版 fork 或社区脚本)曾短暂提供过类似功能,但未被主流采纳。
真正能查到资助信息的地方:看 composer.json 的 funding 字段
自 Composer 2.2 起,composer.json 支持标准字段 funding,但它是纯声明式元数据,不触发任何命令行为。要查看它,得手动 inspect 包的配置:
- 进入项目 vendor 目录下对应包路径,比如
vendor/monolog/monolog/composer.json; - 搜索
"funding"字段,典型结构是:"funding": [ { "type": "github", "url": "https://github.com/sponsors/Seldaek" }, { "type": "patreon", "url": "https://www.patreon.com/Seldaek" } ] - 注意:不是所有包都填了这个字段,很多活跃项目(如
symfony/*)至今为空。
想批量查依赖的资助渠道?用 composer show + 自定义脚本
composer show 本身不输出 funding,但可配合 --format=json 提取原始数据:
- 执行
composer show --format=json | jq -r '.[].name, .[].funding'(需安装jq); - 或写个简单 PHP 脚本读取
vendor/composer/installed.json,遍历每个包的funding键; - 风险点:字段结构不统一,有的值是数组,有的是
null,有的压根没定义,硬解析容易崩; - 更稳妥的做法是只查你关心的几个关键包,直接去 GitHub 页面看
FUNDING.yml,它比composer.json更及时、更全。
实际使用中,别指望靠一条命令自动拉出所有开源作者的收款二维码——资助信息分散在 GitHub、Packagist、项目官网多个地方,且维护意愿远低于代码本身。最可靠的方式,还是打开包的 GitHub 主页,找那个小小的 “Sponsor” 按钮。











