应立即评估并替换:该警告表明包已停止维护,存在安全与兼容性风险;需确认是否直接使用、替代包是否稳定及PHP版本兼容,再通过composer require新包并update完成原位替换。

composer install 报 “Package foo/bar is abandoned” 怎么办
这不是错误,只是 Composer 在告诉你:这个包已被作者标记为废弃(abandoned),通常 Packagist 页面会显示替代方案,比如 foo/bar → newvendor/baz。它仍能装、能跑,但后续不再维护,存在安全与兼容性风险。
是否要立刻替换,取决于三点:
- 你是否还在 actively 使用该包的 API —— 如果只是间接依赖(比如通过
laravel/framework拉进来),优先查替代包是否已被上游支持 - 替代包是否已稳定发布正式版(别直接切
dev-main) - 你的项目 PHP 版本是否满足替代包要求(常见坑:新包要求 PHP 8.1+,而你还在 7.4)
如何用 require 替换废弃包并保留依赖兼容性
别直接删旧包再 require 新包——这会触发全量依赖重算,容易卡在冲突上。正确做法是“原位替换”:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先运行
composer why foo/bar,确认谁引入了它(比如some-package依赖了它) - 查替代包文档,确认是否提供 BC 层或迁移指南(例如
monolog/monolog替换php-logging/php-logging时需改命名空间) - 执行替换命令:
composer require newvendor/baz:^2.0 --no-update(加--no-update只改composer.json,不立即解析) - 再运行
composer update foo/bar newvendor/baz --with-dependencies,让 Composer 仅重算这两个包及其必要子依赖
升级全局工具时遇到 abandoned 提示怎么处理
全局包(如 laravel/installer、phpunit/phpunit)被标为 abandoned 更常见,因为维护者常把 CLI 工具迁移到新组织下。操作路径和项目内不同:
- 不要在项目目录里跑
composer global require—— 全局命令必须在~/.composer目录下执行,或加-g参数 - 先查当前装的是哪个版本:
composer global show laravel/installer - 如果显示
abandoned: laravel/installer → laravel/vite-installer,就执行:composer global require laravel/vite-installer:^1.0 - 然后手动删掉旧包:
composer global remove laravel/installer(注意不是uninstall)
为什么 composer update 后废弃提示没消失
因为 composer.lock 里还存着旧包的记录,而 Composer 默认只在 install 或 update 时检查废弃状态。最常被忽略的一点是:
废弃提示只在首次安装或显式 require 时触发;如果你一直用 composer install,哪怕 lock 文件里锁着废弃包,也不会重复提醒。真正要清理,得让 Composer 主动“看到”变更 —— 所以必须走 require + update 流程,不能只靠删 vendor 和重 install。

















