packagist 不自动同步 composer.json 的 name 修改,仅首次提交或手动触发时读取;改 name 相当于发布新包,需解绑旧包并通知下游迁移,且 name 必须为小写 vendor/name 格式。

composer.json 里 name 字段改了但 packagist 不认
项目名称不是改完 name 就自动同步的——Packagist 只在首次提交或手动触发同步时读取 composer.json。如果你已发布过包,单纯改本地 name 不会影响 Packagist 页面显示,也不会影响 composer require 的引用路径。
实操建议:
- 确认你是否真的需要改
name:它本质是包的唯一标识(vendor/name),改了等于换了个新包,旧依赖无法自动升级 - 如果只是想更新描述,只改
description字段即可,Packagist 下次同步会自动刷新 - 若必须改
name,先在 Packagist 上取消关联旧包,再用新name提交,并通知所有下游用户迁移 - 改完后运行
composer validate确保 JSON 格式合法,否则 Packagist 同步会失败并静默忽略
description 字段被忽略或不显示
Packagist 和 Composer 命令行(如 composer show)都依赖 description 字段,但它不会出现在 vendor/autoload.php 或运行时,纯属元信息。
常见错误现象:
- 字段名拼错成
desc或DESCRIPTION(必须小写description) - 值为空字符串或只含空格,Packagist 会直接跳过渲染
- 用了换行符或 HTML 实体(如
&),会导致composer validate报[ComposerJsonJsonValidationException] - 描述超过 120 字符,Packagist 截断显示但不报错,建议控制在 80 字以内
正确示例:
"description": "A lightweight PSR-14 event dispatcher with no dependencies"
修改后本地命令没反应
Composer 命令(如 composer show myvendor/mypackage)查的是已安装包的 composer.json 快照,不是当前项目根目录下的文件。改了自己项目的 composer.json,不影响已安装的包信息。
所以:
-
composer show显示的是 vendor 里那个包的原始composer.json,不是你正在编辑的 - 要验证修改效果,得先
composer dump-autoload(仅刷新自动加载),或重新composer install(重装依赖) - 如果是私有包且用
path仓库方式引入,需删掉vendor/myvendor/mypackage再composer update才能拉最新composer.json
name 字段格式错误导致 install 失败
name 不是随便起的字符串,它必须符合 vendor/name 格式,且全部小写、只含字母数字、下划线、中划线和点号。一旦出错,composer install 会直接中断并报错。
典型错误:
-
"name": "MyProject"→ 缺少 vendor 段,报Invalid package information: name is required -
"name": "myvendor/MyPackage"→ 包名含大写,报name must be lowercase -
"name": "my-vendor/my.package"→ 点号在包名段允许,但某些旧版 Composer( -
"name": "myvendor/my-package"→ 正确,推荐用中划线分隔单词
验证方式:composer validate --strict,比普通 validate 更早暴露格式问题。
改 name 是动包的身份证,不是改个配置;description 虽然轻量,但拼错、为空、超长都会让别人第一眼看不懂你在干啥。最常被忽略的是:你以为改了就能立刻在 composer show 里看到,其实它根本不读你当前目录的文件。