composer fund 命令生效需同时满足:Composer ≥2.2、已执行 composer install/update、至少一个已安装包的 composer.json 根层级含非空 funding 数组字段。

composer fund 不是付款工具,它只负责告诉你哪些依赖包公开了赞助链接——点开后跳转到 GitHub Sponsors、Open Collective 等第三方平台,由你自行决定是否支持。
composer fund 命令能用的前提是什么
必须同时满足三个条件,否则命令执行成功但无输出,或只显示 No funding information found:
- 你的 Composer 版本 ≥ 2.2(运行
composer --version确认) - 项目已执行过
composer install或composer update,确保vendor/下包完整且vendor/composer/installed.json可读 - 至少一个已安装的包,在它自己的
composer.json根层级声明了非空的funding字段(不是fund,也不是放在extra里)
为什么运行 composer fund 没反应或只显示几个包
这是最常被误读的现象。根本原因不是命令坏了,而是信息源本身缺失:
-
composer fund默认只查直接依赖(require),不递归扫描require-dev或传递依赖;想查某个具体包,得加参数:composer fund monolog/monolog - 很多流行包(如
symfony/http-foundation)本身没填funding,但它的上游(如symfony/console)可能填了——这不代表你不能支持,只是作者没公开入口 - 手动去
vendor/monolog/monolog/composer.json查,如果没"funding": [...]这一行,composer fund就不会显示它,哪怕该包主页有 Sponsor 按钮 - GitHub 仓库设置里的 “Sponsor” 开关和 Composer 的
funding字段完全无关,前者不自动同步到 Packagist 发布的composer.json
如何确认某个包是否真的支持赞助
别信文档或 README,直接看它发布到 Packagist 上的元数据:
- 打开 https://www.php.cn/link/6daab15a4f57549b7f236d7f0cfca3c8 → 点 “Source” → 查看原始
composer.json文件中是否有funding键 - 本地快速验证:运行
composer show monolog/monolog,若输出末尾有funding:行,说明当前安装版本带赞助信息 - 注意格式:值必须是数组,每个元素含
type(小写,如github)和完整url(必须以https://开头);写成"fund"或"funding": "https://..."(字符串而非数组)都无效
作为包作者,怎么让 composer fund 显示你的赞助链接
只需在你自己项目的 composer.json 顶层加字段,发布新版本即可生效:
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/your-username"
},
{
"type": "opencollective",
"url": "https://opencollective.com/your-project"
}
]
关键点:
- 字段名是
funding,不是fund,大小写敏感 - 必须放在根项目
composer.json的最外层,不能嵌套在extra、scripts或其他字段下 - 发布前记得打 tag 并推送,Packagist 需要抓取新版本才能更新元数据
-
composer fund不会读你本地开发目录的composer.json,只读 vendor 中已安装包的最终发布版内容
最容易被忽略的一点:这个功能完全依赖包维护者主动填写,Composer 不做任何兜底、不自动推导、也不对接任何平台 API。你看到的每一条链接,都是有人手动加进去的。











