直接运行 composer diagnose 可快速定位不兼容插件,它会标红指出具体包名及缺失的 composer-plugin-api 版本;若无输出则需检查 autoload_plugins.php 和 composer.lock 中的残留注册;废弃插件如 prestissimo 应用 composer remove 清理,其功能在 Composer 2.2+ 已原生支持。

直接运行 composer diagnose,它会明确告诉你哪个插件不兼容、为什么不行、甚至给出修复线索。
报“Plugin X is not compatible”时先看 composer diagnose
这个命令不是摆设,它是 Composer 官方内置的兼容性探针。只要插件声明了 "composer-plugin-api" 版本不匹配,它就会在输出里标红指出具体包名和缺失字段。
- 输出中看到类似
The plugin hirak/prestissimo requires composer-plugin-api ^2.0, but it is not present,就说明该插件没适配 Composer 2.x - 如果输出里没提任何插件,但
composer install还是失败,那可能是插件已静默失效(比如类文件被删但 autoload 还挂着),此时要查vendor/composer/autoload_plugins.php里是否还注册着它 -
composer diagnose不会修改任何文件,可放心多跑几次;它比翻composer.json或猜错误堆栈快得多
确认插件是否真废弃或归档
有些报错看着像兼容问题,其实是插件作者已放弃维护——比如 hirak/prestissimo 在 2021 年就归档了,composer update 时仍可能残留旧引用。
- 执行
composer show hirak/prestissimo,若提示Package not found,说明它已被移除,但composer.lock或autoload_plugins.php里还有残留记录 - 检查
composer.lock是否含该插件条目:grep -A2 '"hirak/prestissimo"' composer.lock;若有,且"abandoned": true,就该删了 - 用
composer remove hirak/prestissimo清理,别留着占位;它的功能(HTTP 并行下载)在 Composer 2.2+ 已原生支持
别跳过插件的 composer.json 源头验证
插件是否兼容,唯一权威依据是它自己的 composer.json 里有没有 "composer-plugin-api": "^2.0" —— 不是 README、不是 Packagist 页面描述、也不是你本地缓存的元数据。
- 打开
vendor/hirak/prestissimo/composer.json(路径以实际为准),搜composer-plugin-api;没这行就铁定不兼容 - 如果插件在 Packagist 上有页面,点开 “Source” 链接,看最新
composer.json是否已加该字段;有些作者悄悄发了兼容版但没改文档 - 若插件已 fork 过,确认你
require的是原始包还是私有源;私有源若没同步 upstream 的composer-plugin-api更新,也会报同样错
真正卡住人的地方,往往不是“找不到哪个插件”,而是误判了报错来源:以为是某个新装包导致,其实老插件在 composer.lock 里沉睡多年,直到某次 update 触发 autoload 重生成才暴露。每次看到插件相关报错,先 diagnose,再查 lock,最后翻源码——顺序错了,排查时间翻倍。


















