packagist只读取composer.json顶层keywords字段,必须为小写英文字符串数组,需触发webhook、手动更新或打新tag才能生效,且搜索依赖keywords、description、type等综合信号。

keywords字段写在哪才被Packagist读到?
Packagist只认composer.json顶层的keywords字段,嵌套在extra、autoload或require里完全无效。常见错误是把它当注释塞到文件末尾,或加了多余缩进导致JSON解析失败——composer validate会直接报JSON decode error: Syntax error。
- 必须是字符串数组,不是逗号分隔的字符串:
["laravel", "redis", "cache-driver"] ✅,"laravel,redis" ❌
- 每个词必须小写、无空格、无标点(连字符可接受,如
laravel-package)
- 不能重复
name或vendor,比如spatie/laravel-permission不用再填laravel-permission
搜“中文关键词”为什么没结果?
Packagist不支持中文搜索,所有keywords必须用英文,且匹配是精确词干匹配,不支持模糊、分词或语义扩展。用户搜cache,你的包里有"cache"才可能被拉出来;搜caching就不会命中。
- 别写
["缓存", "中文标签"]——这些词根本不会被索引
- 优先选用户真会输入的英文词:Laravel包写
"laravel",不是"php-framework"
- 组合技术栈 + 功能更有效:
["laravel", "redis", "cache-driver"]比["php", "cache", "tool"]强得多
- 避开已被过滤的泛化词:
"php"、"library"、"best"写了等于没写
改完keywords为啥Packagist上还是看不到?
本地改完composer.json并git push,Packagist不会立刻更新。它依赖三种触发方式之一:Webhook自动回调、手动点击包页右上角Update按钮,或打新tag(如v1.2.0)。通常需12–48小时才完成重新索引。
- 确认修改已推送到默认分支(通常是
main或master)
- 登录Packagist.org,检查包页面右上角
Last updated时间戳是否变化
- 搜索时别加引号,
cache redis是“或”关系,不是“cache AND redis”
-
composer search命令早在Composer 2.0+中就被彻底移除,执行即报Command "search" is not defined,别再试
除了keywords,还有哪些字段影响搜索可见性?keywords只是入口之一,真正决定你排第几的是综合信号:下载量、星标数、更新频率、description质量、type准确性,以及require里的PHP/框架版本约束是否清晰。
-
description要写成一句完整话,包含主语言、场景、解决什么问题,例如:"A lightweight PSR-6 cache adapter for Redis using phpredis, designed for CLI-heavy applications"
-
type填准确值,如"laravel-package"或"wordpress-plugin",填错会导致包被过滤出分类页
-
require里的PHP版本(如"php": "^8.1")和框架约束(如"laravel/framework": "^10.0")会直接显示在搜索结果页,是用户筛选的关键依据
["laravel", "redis", "cache-driver"] ✅,"laravel,redis" ❌ laravel-package) name或vendor,比如spatie/laravel-permission不用再填laravel-permission keywords必须用英文,且匹配是精确词干匹配,不支持模糊、分词或语义扩展。用户搜cache,你的包里有"cache"才可能被拉出来;搜caching就不会命中。
- 别写
["缓存", "中文标签"]——这些词根本不会被索引 - 优先选用户真会输入的英文词:Laravel包写
"laravel",不是"php-framework" - 组合技术栈 + 功能更有效:
["laravel", "redis", "cache-driver"]比["php", "cache", "tool"]强得多 - 避开已被过滤的泛化词:
"php"、"library"、"best"写了等于没写
改完keywords为啥Packagist上还是看不到?
本地改完composer.json并git push,Packagist不会立刻更新。它依赖三种触发方式之一:Webhook自动回调、手动点击包页右上角Update按钮,或打新tag(如v1.2.0)。通常需12–48小时才完成重新索引。
- 确认修改已推送到默认分支(通常是
main或master)
- 登录Packagist.org,检查包页面右上角
Last updated时间戳是否变化
- 搜索时别加引号,
cache redis是“或”关系,不是“cache AND redis”
-
composer search命令早在Composer 2.0+中就被彻底移除,执行即报Command "search" is not defined,别再试
除了keywords,还有哪些字段影响搜索可见性?keywords只是入口之一,真正决定你排第几的是综合信号:下载量、星标数、更新频率、description质量、type准确性,以及require里的PHP/框架版本约束是否清晰。
-
description要写成一句完整话,包含主语言、场景、解决什么问题,例如:"A lightweight PSR-6 cache adapter for Redis using phpredis, designed for CLI-heavy applications"
-
type填准确值,如"laravel-package"或"wordpress-plugin",填错会导致包被过滤出分类页
-
require里的PHP版本(如"php": "^8.1")和框架约束(如"laravel/framework": "^10.0")会直接显示在搜索结果页,是用户筛选的关键依据
main或master) Last updated时间戳是否变化 cache redis是“或”关系,不是“cache AND redis” composer search命令早在Composer 2.0+中就被彻底移除,执行即报Command "search" is not defined,别再试 keywords只是入口之一,真正决定你排第几的是综合信号:下载量、星标数、更新频率、description质量、type准确性,以及require里的PHP/框架版本约束是否清晰。
-
description要写成一句完整话,包含主语言、场景、解决什么问题,例如:"A lightweight PSR-6 cache adapter for Redis using phpredis, designed for CLI-heavy applications" -
type填准确值,如"laravel-package"或"wordpress-plugin",填错会导致包被过滤出分类页 -
require里的PHP版本(如"php": "^8.1")和框架约束(如"laravel/framework": "^10.0")会直接显示在搜索结果页,是用户筛选的关键依据
Packagist搜索不是黑盒匹配,它把keywords、description、name、type和require全摊开看。最易被忽略的,其实是description里那句完整话——它既参与全文分词,又影响用户点击决策,而大多数人只盯着keywords反复改。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。










