composer fund 仅读取本地 composer.json 的 funding 字段并列出链接,不自动打钱、不递归扫描依赖、不同步 Packagist 缓存,需手动更新或检查文件。

composer fund 不会自动打钱,也不会替你完成赞助动作——它只是把项目 composer.json 里声明的赞助链接(如 GitHub Sponsors、Open Collective、Buy Me a Coffee 等)列出来,供你手动访问。
fund 命令从哪读取赞助信息?
它只解析当前项目或依赖包根目录下的 composer.json 中的 funding 字段。该字段必须是数组,每个元素需含 type 和 url:
{
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/sebastianbergmann"
},
{
"type": "open-collective",
"url": "https://opencollective.com/phpunit"
}
]
}
注意:funding 不在 Packagist 元数据缓存中同步——如果你用的是已安装的旧版本包,而作者后来才加了该字段,composer fund 不会显示,除非你执行 composer update 拉取最新 composer.json。
运行 fund 时常见的误判现象
- 执行
composer fund phpunit/phpunit却返回 “No funding information found”:可能是因为本地已安装的phpunit/phpunit版本对应composer.json里还没加funding字段 - 执行
composer fund(无参数)只显示当前项目的赞助链接,**不会递归列出所有已安装依赖的赞助页** - 某些包把
funding放在require-dev的依赖里,但composer fund默认不扫描开发依赖,除非你加--dev参数
如何批量查看依赖的赞助信息?
Composer 原生命令不支持一键遍历全部依赖。可行做法是:
- 用
composer show --direct --no-dev获取直接依赖列表,再循环调用composer fund - 检查
vendor/文件是否存在/ /composer.json funding字段——这是最可靠的方式,因为composer fund本身也只读这个文件 - 注意:有些包(如 Laravel 官方包)把
funding放在顶层仓库的composer.json,但发布到 Packagist 时未同步更新,导致 vendor 里的文件仍为空
真正起作用的不是命令本身,而是维护者是否主动填写、是否及时推送更新。别指望 composer fund 能自动发现隐藏赞助入口,它只认明确定义在 composer.json 里的那几行。










