Composer.json 不支持定义项目图标,Packagist 图标来自仓库 logo 文件或 README 中的图片链接;composer abandon 仅标记弃用元数据,不影响安装,需人工识别并迁移。

composer.json 里不能加项目图标
Composer 本身不支持在 composer.json 中定义或显示项目图标。它不是包管理器的职责,也不被 Packagist 或 Composer CLI 解析或渲染。你可能会看到某些 PHP 包在 Packagist 页面上有图标,但那其实是 Packagist 后台手动上传或从 GitHub 仓库的 README.md 中提取的(比如识别 或特定注释),和 composer.json 无关。
如果你希望 Packagist 显示图标,唯一可靠方式是:
- 确保你的 GitHub/GitLab 仓库根目录有 logo.png、icon.svg 等常见命名文件
- 或在 README.md 顶部显式插入图片链接,例如:
Packagist 会抓取并缓存该图片(需重新触发同步)
用 composer abandon 发送弃用通知
composer abandon 是一个 Packagist 集成功能,运行后会在 Packagist 页面上给该包打上「abandoned」标签,并可关联一个推荐替代包。它不会修改本地代码,也不影响 require 行为,仅是元数据标记。
执行前确保:
- 你拥有该包在 Packagist 上的维护权限(即登录态匹配)
- 包名准确无误(如 monolog/monolog),大小写敏感
- 已安装最新版 composer(≥2.5)
基本用法:composer abandon vendor/package-name
若要同时指定推荐替代包:composer abandon vendor/package-name vendor/alternative-package
注意:
- 第二次执行相同命令会覆盖原设置
- 若填错替代包名,Packagist 不校验其是否存在,只作字符串记录
- 弃用通知对已安装该项目的用户无主动提醒,只有下次访问 Packagist 页面或运行 composer show 时才可能看到提示
弃用后开发者实际会遇到什么
普通用户执行 composer require 时不会被阻止,也不会报错。但以下场景会暴露弃用状态:
- 在 Packagist 页面顶部显示黄色横幅:「This package is abandoned and no longer maintained. The author suggests using vendor/alternative-package instead.」
- 运行 composer show vendor/package-name 时,输出中会出现 abandoned: vendor/alternative-package 字段
- 某些 IDE(如 PhpStorm)或分析工具(如 Deptrac)可能读取该字段并标灰依赖项
真正起作用的是人的判断,不是机器拦截。所以如果你是维护者,建议同步做三件事:
- 在 README.md 顶部加粗说明弃用信息及迁移路径
- 发布最后一个版本,在 changelog 或 UPGRADE.md 中强调
- 给常用下游包提 PR,替换 require 行
别把 abandoned 当成卸载指令
composer abandon 和 composer remove 完全无关。前者改 Packagist 元数据,后者删本地依赖。很多人误以为运行了 abandon 就等于“卸载”或“禁用”,结果发现项目照常运行、CI 也没报警——这是正常现象。
如果你真想阻止别人继续用:
- 在包的 composer.json 中设置 "minimum-stability": "dev" 并删掉所有 stable 版本 tag(不推荐)
- 或在 src/ 入口处抛出 RuntimeException(仅适用于你还控制代码发布)
- 更务实的做法:在 post-install-cmd 或 post-update-cmd 脚本里检查是否含已弃用包并 warn
最关键的细节常被忽略:Packagist 的 abandoned 状态**不同步到 Composer 的 lock 文件或安装过程**,它只是个静态提示位。要不要停用,最终还得靠人去看、去信、去改。










