Composer fund 是本地只读命令,仅解析已安装包 composer.json 中的 funding 数组字段并展示,不发起支付、不跳转网页;funding 需置于包自身 composer.json 顶层,格式为小写 type + 完整 HTTPS url。

Composer 没有 fund 命令 —— 这是常见误解。你运行 composer fund 看到的提示,其实是 Composer 3.0+ 内置的一个只读功能,它不发起支付、不跳转平台、不存储凭证,仅从 composer.json 的 funding 字段提取信息并展示。
为什么 composer fund 不会打开网页或转账?
这个命令纯粹是本地信息展示工具,设计目标就是“告知,而非行动”。它的逻辑非常简单:
- 扫描当前项目所有已安装包的
composer.json(包括根项目和 vendor 中每个包) - 查找其中定义的
"funding"字段(格式为数组,支持type+url) - 去重后按包名排序,输出可读列表
它不调用浏览器、不验证 URL 可访问性、也不区分是否已登录 GitHub Sponsors 或 Open Collective 账户。
funding 字段怎么写才被 composer fund 识别?
必须放在包自己的 composer.json 顶层(不是根项目配置),且格式严格。常见合法写法:
{
"name": "monolog/monolog",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/Seldaek"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/packagist/monolog/monolog"
}
]
}
注意以下易错点:
-
funding必须是数组,即使只有一个入口 -
type值需小写,常用值:github、patreon、open_collective、tidelift、community_bridge -
url必须是完整 HTTPS 链接,不能是相对路径或短链接 - 字段写在根项目
composer.json中无效 ——composer fund只读 vendor 包的元数据
如何真正支持一个依赖包的维护者?
执行 composer fund 后看到的链接,才是实际支持入口。但要注意:
- 点击
github类型链接会跳转到 GitHub Sponsors 页面,需你手动完成订阅(可能需要 GitHub 认证) -
open_collective链接指向 Open Collective 项目页,捐赠流程独立于 Composer - 有些包写的是
type: "custom",对应url可能是作者个人 PayPal 或 Buy Me a Coffee 页面 - 没有
funding字段的包,composer fund就不会显示它 —— 并不表示不能支持,只是作者没声明渠道
顺带提醒:如果你是包作者,想让 composer fund 显示你的收款方式,别忘了在发布新版本前更新 composer.json 并 push tag。
最常被忽略的一点:这个功能只对已安装的包生效。如果某个包被 require-dev 引入但未实际安装(比如因平台约束被跳过),它就不会出现在 composer fund 输出里 —— 即使它的 composer.json 里写了 funding。










