创建composer插件需定义类型为composer-plugin的包,实现PluginInterface接口,并在extra.class中指定入口类。通过监听事件如post-install-cmd可执行自定义逻辑。使用时可通过本地路径引用或发布到Packagist,安装后Composer会自动激活插件并运行相应方法。

创建和使用一个 Composer 插件,本质上是开发一个 php 包,该包通过实现特定接口来扩展 Composer 的功能。Composer 插件可以在安装、更新、卸载包等过程中执行自定义逻辑,比如自动配置、生成文件或修改依赖行为。
创建一个 Composer 插件
要创建一个 Composer 插件,需要满足几个条件:正确的包类型、实现插件接口、在 composer.json 中声明插件信息。
1. 初始化项目
进入你的项目目录,运行:
mkdir my-composer-plugin cd my-composer-plugin composer init
在初始化过程中,设置包名(如 your-vendor/my-composer-plugin),类型设为 composer-plugin。 2. 设置 composer.json
确保 composer.json 包含以下关键字段:
{ "name": "your-vendor/my-composer-plugin", "type": "composer-plugin", "require": { "composer-plugin-api": "^2.0", "composer/composer": "^2.0" }, "autoload": { "psr-4": { "MyComposerPlugin": "src/" } }, "extra": { "class": "MyComposerPluginMyPlugin" } }
说明:
- type: composer-plugin 是必须的,让 Composer 知道这是一个插件。
- composer-plugin-api 提供插件接口。
- composer/composer 提供核心类,如 IO、Event 等。
- extra.class 指定插件入口类,Composer 加载时会实例化这个类。
3. 编写插件类
创建目录 src/ 并添加主类文件 MyPlugin.php:
<?php namespace MyComposerPlugin; use ComposerComposer; use ComposerIOIOInterface; use ComposerPluginPluginInterface; use ComposerEventDispatcherEventSubscriberInterface; use ComposerScriptScriptEvents; use ComposerInstallerPackageEvent; class MyPlugin implements PluginInterface, EventSubscriberInterface { protected $composer; protected $io; public function activate(Composer $composer, IOInterface $io) { $this->composer = $composer; $this->io = $io; } public static function getSubscribedEvents() { return [ ScriptEvents::POST_INSTALL_CMD => 'onPostInstall', ScriptEvents::POST_UPDATE_CMD => 'onPostUpdate', ]; } public function onPostInstall($event) { $this->io->write('<info>[MyPlugin] 安装完成,执行自定义操作...</info>'); // 可以在这里执行文件生成、配置写入等 } public function onPostUpdate($event) { $this->io->write('<info>[MyPlugin] 更新完成,清理缓存...</info>'); } }
这个插件监听了安装和更新命令后的事件,并输出提示信息。
使用你创建的插件
本地测试或在其他项目中使用该插件,有几种方式。
1. 本地路径引用(开发阶段)
在目标项目的 composer.json 中添加仓库和依赖:
{ "repositories": [ { "type": "path", "url": "../my-composer-plugin" } ], "require": { "your-vendor/my-composer-plugin": "*" } }
然后运行:
composer require your-vendor/my-composer-plugin
Composer 会软链接插件到 vendor,并自动激活它(因为是插件类型)。 2. 发布到 Packagist(正式使用)
将插件推送到 gitHub 或 gitlab,然后发布到 Packagist。其他项目只需:
composer require your-vendor/my-composer-plugin
即可自动启用。 3. 验证插件是否生效
运行:
composer install
如果看到插件输出的信息,说明已成功加载并执行。
注意事项
- 插件权限较高,可能影响所有 Composer 操作,务必谨慎处理逻辑。
- 确保兼容当前 Composer 主版本(1.x 或 2.x)。
- 避免阻塞操作或抛出未捕获异常。
- 可通过
composer config --list查看已加载插件(部分版本支持)。
基本上就这些。一个简单的 Composer 插件结构清晰,适合自动化项目初始化、环境检查、配置注入等场景。


