通过 composer global show –format=json | jq ‘to_entries[] | select(.value.type == “composer-plugin”) | .key’ 可列出已启用插件;插件是否生效需观察 composer install -v 等命令输出日志或行为变化,而非仅依赖 composer list。

怎么确认 Composer 当前启用了哪些插件?
Composer 本身没有 composer plugin list 这样的原生命令,你得靠组合命令“反推”——本质是查已安装且被识别为插件的包。关键判断依据只有两个:"type": "composer-plugin" + 实现了 ComposerPluginPluginInterface。官方不维护插件中心,所以不能靠界面点选,只能从已安装包里筛。
- 先运行
composer show --format=json(项目内)或composer global show --format=json(全局),输出所有已安装包的元信息 - 用
jq或手动过滤出含"type": "composer-plugin"的条目:composer global show --format=json | jq 'to_entries[] | select(.value.type == "composer-plugin") | .key' - 注意:有些包名带
-plugin(如phpunit/phpunit的扩展),但没声明type,就只是普通库,不是 Composer 插件
为什么 composer list 看不到插件命令?
插件是否在 composer list 中出现,取决于它是否注册了自定义命令(比如 composer bin install 来自 bamarni/composer-bin-plugin)。很多插件是“静默工作”的,比如 hirak/prestissimo 加速下载、sandersander/composer-link 做本地链接,它们不添加新命令,只劫持原有流程(install/update),所以不会出现在 composer list 输出里。
- 如果插件没注册命令,
composer list就完全看不到它——这不代表它没生效 - 验证是否启用:执行
composer install -v,观察输出中是否有插件名的日志(如prestissimo: enabled) - 某些插件(如
fxp/composer-asset-plugin)已停止维护,新版 Composer(2.2+)会直接报错或忽略,别被旧文档误导
怎么快速验证某个插件是否真正在工作?
光看“装上了”不等于“跑起来了”。插件可能因 Composer 版本、PHP 版本、配置冲突或加载顺序失败而静默降级。最可靠的方式是触发它本该介入的流程,再观察行为变化。
-
hirak/prestissimo:运行composer install -v,看到多行Downloading ...并发打印,而非逐个等待,说明生效;若仍串行,可能是被COMPOSER_PRESTISSIMO_DISABLE=1环境变量禁用 -
kylekatarnls/update-helper:执行composer update后,末尾出现Package monolog/monolog has a new version...提示,才表示它在运行 -
sandersander/composer-link:执行composer link ../my-package后,检查vendor/my-package是否变成符号链接,且composer dump-autoload后能正常use里面的类
插件失效的三个高发场景
插件不像普通依赖,它的生命周期绑定 Composer 自身的加载机制,稍有不慎就掉链子。最容易被忽略的是 Composer 版本兼容性——很多插件只支持特定大版本。
- Composer 2.x 不兼容老插件:例如
fxp/composer-asset-plugin在 Composer 2.0+ 已彻底不可用,强行安装会报Plugin installation failed,必须换用composer/installers+ 手动管理前端资产 - 全局插件未被项目继承:
composer global require装的插件默认只对全局命令有效;若项目里composer.json中没显式 require 它,某些插件(尤其是需 hook install 流程的)可能不触发 - autoload 冲突导致 PluginInterface 加载失败:比如插件自身用了高版本 PHP 语法,而当前 CLI PHP 版本低,Composer 会在初始化阶段跳过加载,且不报错——只能靠
composer diagnose查 “Plugin loading” 相关提示
插件机制本身轻量但脆弱,一旦出问题往往没明确错误,排查要从“它该在哪一刻介入”倒推,而不是盯着安装命令看成功与否。