Composer插件必须满足type为"composer-plugin"、实现PluginInterface、extra.class指向完整类名三条件,否则全局安装后也不会激活;验证方式是composer global show --format=json查看type字段。

composer global require 装了插件但没反应?先确认它是不是真插件
运行 composer global require vendor/plugin 后什么都没发生,大概率是因为这个包根本不是 Composer 插件——它只是个普通工具库。插件必须满足三个硬性条件:type 字段是 "composer-plugin",类实现 Composer\Plugin\PluginInterface,且 extra.class 指向一个可自动加载的完整类名。
验证方式很简单:composer global show --format=json vendor/plugin,检查输出里 "type" 的值。如果不是 "composer-plugin",那它不会被 Composer 主进程扫描和激活,装了也白装。
- 别信 GitHub README 里写的“支持 Composer 插件”,得看它
composer.json里的type -
extra.class写错一个字母(比如MyPlugin写成myplugin)也会静默失败,不报错也不触发 - 插件类构造函数里抛异常,Composer 会直接跳过加载,连 warning 都不输出
全局插件必须用 composer global require,不能用 require --global
composer require --global xxx 是无效命令,--global 不是 require 的合法选项。真正生效的只有 composer global require xxx。这条命令会把包安装到 ~/.composer/vendor/(Linux/macOS)或 %APPDATA%\Composer\vendor\(Windows),并让 Composer 在每次启动时扫描该目录下的插件。
- 在项目目录里执行
composer global require没问题,但它和当前项目无关,只影响全局环境 - 如果想在项目里用插件,得走
repositories+require路线,且必须配好autoload和extra.class - 装完后别急着跑
composer install,先用composer -V或composer diagnose触发一次主进程启动,这才是插件激活的真实时机
插件事件监听写错一个字符就失效
插件通过订阅 Composer 内置事件来工作,但事件名不是随便写的字符串。比如想监听安装完成后的动作,必须用 ScriptEvents::POST_INSTALL_CMD,而不是 post-install、post_install_cmd 或 PostInstallCmd。大小写、下划线、前缀缺一不可。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
订阅方法也必须以 on 开头,参数类型得是对应事件类(如 CommandEvent),否则注册失败且无提示。
- 在
activate()方法里加一行file_put_contents('/tmp/plugin-activated', 'yes');,再执行composer -V,是最快速验证插件是否被加载的方式 - 别在事件回调里
throw new Exception()中断流程——这会让整个composer install直接报红退出,用户只看到堆栈,看不到你的提示信息 - 读取配置要用
$composer->getPackage()->getExtra()['your-plugin']['enabled'] ?? false,getExtra()可能返回null,不判空会触发 Notice
Windows 下全局插件失效,八成是 PHP 路径或权限问题
Windows 用户常遇到插件装了却完全没日志、没输出,真实原因往往不在插件本身,而在环境链路断裂:要么 php.exe 不在系统 PATH,要么 composer.bat 所在目录没进 PATH,要么 %APPDATA%\Composer\vendor\bin 没加进用户变量 PATH。
尤其注意:composer.bat 第一行就是调用 php,如果系统找不到 php,后续一切免谈。而 Git Bash、VS Code 集成终端默认不继承 Windows 系统 PATH,得单独配置。
- 运行
where php确认 PHP 可执行路径;若无输出,先把它加进系统 PATH - 确保
%APPDATA%\Composer\vendor\bin是添加在「用户变量」的 PATH 里,不是「系统变量」,也不是%APPDATA%\Composer\bin(后者不存在) - 改完 PATH 后必须关掉所有 CMD/PowerShell/终端,重新打开再试;旧窗口的环境变量不会刷新
插件是否生效,从来不是看有没有装上,而是看它有没有被 Composer 主进程加载、有没有正确订阅事件、有没有在正确的上下文中拿到依赖对象。这三个环节里任何一个出错,都会表现为“静默失效”,没有错误提示,也没有日志输出——这才是最需要警惕的地方。

















