composer怎么查看已启用插件_composer plugin列表命令【扩展】

1次阅读

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

composer怎么查看已启用插件_composer plugin列表命令【扩展】

怎么确认 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” 相关提示

插件机制本身轻量但脆弱,一旦出问题往往没明确错误,排查要从“它该在哪一刻介入”倒推,而不是盯着安装命令看成功与否。

text=ZqhQzanResources