目前真正实用、无兼容风险的 Composer 插件只剩三个:kylekatarnls/update-helper(版本预警)、sandersander/composer-link(本地包调试)、vaimo/composer-plugin(自动格式化 composer.json)。

哪些 Composer 插件现在还值得装?
Composer 2.x 已原生支持并行下载、更快的依赖解析和更健壮的锁文件处理,很多老插件不仅失效,还会报错或冲突。目前真正实用、无兼容风险的插件只剩几个核心角色:kylekatarnls/update-helper(版本预警)、sandersander/composer-link(本地包调试)、vaimo/composer-plugin(自动格式化 composer.json)。其他如 hirak/prestissimo 在 Composer 2 下必须卸载,否则会触发 Plugin is not compatible with Composer 2 警告。
-
composer global remove hirak/prestissimo—— 如果你还在用,先删掉 - 确认 Composer 版本:
composer --version,输出应为2.x(如2.7.6),不是1.10.22这类旧版 - 全局插件统一管理路径:
composer global config home,确保该路径的bin/已加入$PATH
如何安全地链接本地开发中的包?
改 path 仓库、反复 composer install、手动改 autoload —— 这些都是低效操作。sandersander/composer-link 提供真正的“软链接”语义:它不复制文件,也不修改 composer.json,只在当前项目 vendor 中建符号链接,并让自动加载器识别源码变更。
- 安装:
composer global require sandersander/composer-link - 在项目中链接本地包:
composer link ../my-utils(假设my-utils是含composer.json的目录) - ⚠️ 坑:改了被链接包的
autoload规则(比如从"psr-4"改成"files"),必须手动运行composer dump-autoload,否则新规则不生效 - ⚠️ 坑:链接后执行
composer update可能意外解除链接——插件不会阻止该行为,建议开发期禁用自动更新,或用--with-dependencies显式控制范围
为什么 update-helper 比看 changelog 更可靠?
kylekatarnls/update-helper 不是帮你升级,而是告诉你「为什么没升」。它在每次 composer update 后扫描已安装包的实际版本与最新稳定版,再比对 composer.json 中的约束表达式(如 "^2.8"),明确指出哪些包因版本约束卡住、哪些其实可以安全放宽。
- 安装即用:
composer global require kylekatarnls/update-helper - 典型输出:
monolog/monolog: 2.10.0 → 3.5.0 (constrained by ^2.0),一目了然 - ⚠️ 坑:若项目设了
"minimum-stability": "dev",它可能把dev-main当作“可升级目标”,但实际不该升——这时需人工判断,别盲信提示 - 它不修改任何文件,只读取 + 输出,所以可放心集成进 CI 流程做每日依赖健康检查
如何让 composer.json 格式自动对齐团队规范?
多人协作时,composer.json 的缩进、键序、空行经常不一致,git diff 全是噪音。vaimo/composer-plugin(常称 composer-normalize)会在每次 composer install 或 composer update 后静默重写文件,保持结构标准化。
- 全局安装:
composer global require vaimo/composer-plugin - 手动触发:
composer normalize(直接写入),composer normalize --dry-run(预览变更) - 它按 PSR-12 和 Composer 官方推荐顺序排序键名(如
name→type→description),不是简单美化,而是语义归一 - ⚠️ 坑:如果项目
composer.json里有注释(JSON 不合法),插件会直接报错退出——注释必须删掉才能用
真正影响日常效率的不是插件数量,而是它们是否与当前 Composer 主版本协同工作。现在 Composer 2 的生态已经稳定,盲目套用 2020 年的“必装清单”反而会引入冲突。重点盯住那三个:一个管版本清醒,一个管本地调试,一个管配置整洁——其余的,先关掉,等真有场景再说。










