keywords仅影响Packagist页面展示与搜索匹配,不参与依赖解析;必须置于composer.json顶层、为合法字符串数组,错误嵌套或格式将被静默忽略。

keywords 字段只影响 Packagist 页面展示和搜索匹配,不参与任何安装、加载或依赖解析逻辑;填错或不填,composer install 一切照常运行。
keywords 必须写在 composer.json 顶层,且是合法字符串数组
它不是注释,不是 extra 的子字段,也不是 description 的延伸。一旦嵌套进 require、autoload 或 extra,Packagist 就完全忽略——还不报错,你根本不知道它失效了。
- ✅ 正确位置:
"keywords": ["http-client", "psr-18", "curl"](与"name"、"description"同级) - ❌ 错误写法:
"extra": {"keywords": [...]}、"keywords": "http-client,psr-18"(字符串非数组)、"keywords": ["HTTP-Client"](含大写) - ⚠️ 验证方式:运行
composer validate,它不会检查 keywords 内容,但能揪出 JSON 格式错误(比如多逗号、少引号),这类错误会导致整个字段被跳过
填什么词才真有人搜,而不是自嗨
Packagist 不做语义理解,也不支持模糊匹配。“api” 和 “json-api” 是两个词,“laravel-helper” 不等于 “laravel helper”。用户搜什么,你就得按他们实际输入的词来填。
- 优先选组合词:
"json-rpc"、"csv-export"、"rate-limiting"—— 比单写"rpc"、"csv"、"rate"更精准 - 技术栈要具体:
"laravel"可以,"laravel-10"就多余(版本应写在require.php);"psr-14"有效,"event-dispatcher"太泛 - 绝对别堆砌:
"php"、"library"、"tool"这类词几乎无区分度,Packagist 甚至会过滤掉部分主观词(如"fast"、"modern") - 别重复包名上下文:包叫
spatie/laravel-permission,就别再写"permission"—— 用户点进来默认就预期这个功能
改了 keywords 却没出现在 Packagist 页面?先看这三处
不是配置无效,而是同步断在了某个环节。Packagist 不轮询你的仓库,它靠你“推”或“点”来触发元数据拉取。
- 没发新 tag 或没 push 到默认分支(通常是
main):仅改composer.json并git commit不够,必须git push origin main或打git tag v1.2.3 && git push --tags - Webhook 失效或未配置:登录 GitHub/GitLab 仓库 Settings → Webhooks,确认 URL 是
https://packagist.org/api/github(GitHub)或对应 GitLab 地址,且状态为 active - 页面显示
["foo","bar"]原始数组:说明 JSON 解析失败,大概率是composer.json里多了逗号、少了引号,或用了中文引号;用composer validate立刻定位
真正容易被忽略的是:keywords 改完后,Packagist 不会重新索引历史版本,只更新当前 default branch 的最新 composer.json;而且它只用于人工浏览时快速识别用途,不是搜索排序杠杆——包能不能被找到,name 和 description 的措辞,比 keywords 影响更大。



















