keywords字段仅影响Packagist搜索,不参与依赖解析;须置于composer.json顶层字符串数组中,小写无空格,最多索引前10个,修改后需git push触发更新。

Composer 项目 keywords 字段只影响 Packagist 搜索结果,不参与依赖解析或安装逻辑,设不设、设什么都不会改变项目行为。
keywords 字段写在哪?怎么填才有效
它必须写在项目根目录的 composer.json 文件顶层,和 name、description 同级:
{
"name": "myvendor/myproject",
"description": "A simple demo app",
"keywords": ["php", "cli", "tool", "utility"]
}
- 值必须是字符串数组,不能是单个字符串或对象
- 每个关键词建议用小写、无空格、无特殊符号(如
"laravel-package"可以,"Laravel Package"会被截断或忽略) - Packagist 搜索时会匹配关键词前缀,比如搜
util可能命中utility,但不保证完全模糊匹配 - 不要堆砌无关词(如
"best"、"awesome"),这类词已被 Packagist 过滤,不生效
为什么改了 keywords 却没出现在 Packagist 页面上
常见原因有三个:
- 未推送更新:改完
composer.json后,必须git push触发 Packagist 的自动更新(前提是已绑定仓库);手动更新需登录 Packagist 点 “Update” - 字段位置错:如果写在
require、autoload或嵌套对象里,Composer 解析时直接忽略,不会报错也不会生效 - 缓存延迟:Packagist 页面可能缓存数分钟,刷新后仍不显示可查 包页右下角的 last updated 时间
keywords 和其他字段的关系与限制
它和 type、description 共同构成 Packagist 的元数据索引,但作用完全不同:
-
type决定是否被归类为library/wordpress-plugin等,影响安装路径和工具识别;keywords纯属搜索标签 -
description是唯一强制字段,且会显示在搜索结果摘要中;keywords不展示,只用于后台匹配 - 长度无硬性限制,但 Packagist 实际只索引前 10 个关键词,多余项被丢弃(可通过 API 查看实际入库值)
真正容易被忽略的是:keywords 完全不影响 composer install 或 composer require 的任何行为——它只是给“人”看的搜索辅助,不是给“机器”用的配置项。











