废弃已发布版本需通过 packagist 后台或 api 标记,无法修改历史 tag 的 composer.json;标记后仅影响新安装提示,旧版本仍可正常安装,且操作不可逆。

不能直接“废弃”已发布的版本,只能在新版本中声明废弃状态,并同步到 Packagist。 已发布的 tag(如 v1.2.3)一旦推送到 GitHub/GitLab 并被 Packagist 抓取,其 composer.json 内容就固定了——你无法修改它来加 abandoned 字段。所谓“废弃包”,本质是向 Packagist 发起一次元数据更新操作,影响的是后续安装行为和用户提示,不是回滚或删除历史版本。
如何让 Packagist 显示“abandoned”标记
废弃动作必须由包的维护者(或有权限的协作者)在 Packagist 后台触发,或通过 API 调用:
- 登录 packagist.org,进入对应包页面,点击右上角 “Abandon package” 按钮
- 填写推荐替代包名(可选),例如
php-logging/logger;留空则只显示 “is abandoned”,不带 “Use … instead” - 确认后,Packagist 会立即更新该包的元数据,所有用户下次运行
composer install或composer update时都会看到警告 - 这个操作不可逆,且原包名从此不能再发布新版本(防止滥用)
为什么改本地 composer.json 并 push 新 tag 不够
即使你在代码仓库里给 composer.json 加上 "abandoned": "new/package" 并打新 tag(如 v1.2.4),也必须满足两个前提,警告才会生效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 该新版本已被 Packagist 成功抓取(需确保仓库 webhook 正常,或手动触发同步)
- 用户使用的 Composer 版本 ≥
2.2.0(旧版完全忽略abandoned字段) - 用户安装的是这个新版本(比如约束写的是
^1.2),而不是锁在旧版v1.2.3—— 后者永远看不到提示
废弃后用户仍能安装旧版本吗
可以,而且很常见。废弃只是元数据标记,不阻断任何安装逻辑:
-
composer require old/package:1.2.3依然成功 -
composer update若composer.lock里锁着1.2.3,就不会升级,也不会报废弃警告 - 只有当依赖解析需要拉取新版本(如放宽约束、删 lock 文件重装),或用户显式运行
composer outdated时,才可能暴露问题 - CI 中容易漏掉:默认
composer installexit code 是 0,警告不中断流程;要用--fail-on-warning(Composer ≥2.5)才能捕获
真正难的不是点那个“Abandon”按钮,而是确保所有下游用户都感知到变更、理解风险、并实际完成迁移——这取决于你是否填了靠谱的替代包、文档是否及时更新、以及有没有在 README 顶部加醒目说明。否则,废弃只是把问题从自己身上推给了别人。










