Composer插件需满足三条件才激活:type为composer-plugin、config.disable-plugins为false、extra.allow-plugins显式启用;否则仅require无效。

Composer 插件不是“装上就用”的工具,它必须被 Composer 主进程在 install 或 update 阶段识别、加载并激活——任何只执行 composer require 的操作,都不会让插件真正生效。
插件没反应?先确认它是不是真插件
很多包名字带“plugin”或“installer”,但只是普通依赖,根本不是 Composer 插件。判断依据只有一个:composer show vendor/package-name 输出里必须包含 types : composer-plugin。
- 如果输出里没有
types行,或写的是library、metapackage,那它就是个普通包,require后不会触发任何插件逻辑 - 常见伪插件:比如
phpunit/phpunit(是 bin 工具)、laravel/pint(是命令行应用),它们靠bin字段注册可执行文件,不走插件机制 - 真正插件如
hirak/prestissimo(已归档)、dealerdirect/phpcodesniffer-composer-installer,其composer.json里明确写了"type": "composer-plugin"
装了但 activate() 没执行?检查三个硬性条件
即使包类型正确,插件仍可能静默跳过激活。关键看这三点是否全部满足:
-
config.disable-plugins必须为false或未设置;运行composer config disable-plugins查看,若输出true,立刻执行composer config disable-plugins false - 项目根
composer.json顶层必须有extra.allow-plugins,且显式列出该插件名(大小写敏感);例如:{"dealerdirect/phpcodesniffer-composer-installer": true};设成true全放开不推荐 -
extra.class字段必须存在,且值是完整类名(如"Dealerdirect\Composer\Plugin\PHPCodeSnifferPlugin"),该类必须实现Composer\Plugin\PluginInterface,构造函数不能抛异常
本地开发改了插件代码却没生效?重建 autoload 是必须步骤
Composer 缓存了类映射和插件实例,改完 PHP 文件后不重建,旧版本仍驻留在内存中。调试时必须做三件事:
- 删掉
vendor/composer/autoload_psr4.php和vendor/composer/autoload_classmap.php - 运行
composer dump-autoload -o强制刷新自动加载规则 - 再执行
composer install(不是require)——只有这个命令会重新扫描插件、调用activate()
建议在 activate() 开头加一行 file_put_contents('/tmp/plugin-activated', date('c') . "\n", FILE_APPEND),这是验证入口是否到达的唯一可靠方式。
WordPress 插件用 Composer 安装?别直接 require,要配仓库和路径
WordPress 插件不能像普通 PHP 包一样用 composer require 直接安装,因为 Packagist 不收录它们,且 WordPress 加载机制与 Composer 完全无关。
- 必须先在
composer.json的repositories字段添加 WPackagist 源:{"type":"composer","url":"https://wpackagist.org"} - 插件包名格式固定,必须是
wpackagist-plugin/xxx(如wpackagist-plugin/akismet),去 https://www.php.cn/link/3e80fb1c17b97791d5bcdd3e91c617a7 搜索确认,别手拼 - 必须配置
extra.installer-paths,否则插件会被装进vendor/下,WordPress 根本找不到;示例:"wp-content/plugins/{$name}/": ["type:wpackagist-plugin"] - 确保
wp-content/plugins/目录存在且可写,否则 Composer 会报错或静默失败
最常被忽略的是:插件安装成功 ≠ WordPress 中已激活。Composer 只负责把文件放到指定目录,后续仍需在 wp-admin 中手动启用,或通过 wp plugin activate 命令完成。


















