funding 字段是纯元数据,用于展示赞助链接,不参与依赖解析或安装;执行 composer show 可查看,要求 Composer 2.2+,字段值须为含 type 和 url 的对象数组,常见 type 有 github、patreon 等。

composer 的 funding 字段是给包维护者收赞助用的
它不参与依赖解析、安装或 autoload,纯粹是元数据字段,用于在 composer show、Packagist 网站或 IDE 插件中展示赞助链接。Composer 本身不会自动跳转、弹窗或调用这些链接,也不做任何验证或资金流转。
用 composer show 查看某个包的赞助信息
执行命令后,如果包的 composer.json 中定义了 funding 字段,Composer 会在输出末尾显示 funding 行(仅限 Composer 2.2+):
composer show monolog/monolog
你会看到类似这样的输出片段:
funding: [github] https://github.com/sponsors/Seldaek
-
funding字段值必须是数组,每个元素是含type和url键的对象 - 常见
type值包括github、patreon、tidelift、communityBridge等,Composer 不校验合法性,只原样展示 - 旧版 Composer(
funding 字段写法与常见错误
字段必须写在包自己的 composer.json 根层级,不是 require 或 autoload 下面。正确示例:
{
"name": "foo/bar",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/foo"
},
{
"type": "patreon",
"url": "https://www.patreon.com/foo"
}
]
}
- 字段名必须是小写
funding,写成Funding或fundingUrl都无效 -
url必须是完整可访问的 URL(含协议),https://github.com/sponsors/foo✅,sponsors/foo❌ - 如果用了相对路径、空字符串或 null,Composer 会静默忽略整条记录,不会报错也不会提示
为什么有些包写了 funding 却查不到?
最常见原因是 Packagist 同步滞后或未触发重索引。Composer CLI 只读取本地已安装包的 composer.json,而 composer show 显示的是 Packagist 缓存的元数据(非本地文件)。
- 新提交
funding后,需等 Packagist 自动抓取(通常几分钟到几小时),或手动点击包页面上的 “Update” 按钮强制同步 - 本地开发时若用
path仓库或repositories自定义源,composer show默认不读取本地composer.json,得加-s参数:composer show -s foo/bar
- 某些包把
funding放在extra里,或用自定义键名,这种写法对 Composer 官方工具完全不可见
真正起作用的只有 Packagist 上最终发布的 composer.json 文件里的标准 funding 数组,其余都是徒劳。










