一个Composer插件可在install或update后输出提示信息。需设置type为composer-plugin,实现PluginInterface接口,并通过EventSubscriberInterface监听post-install-cmd和post-update-cmd事件,在对应回调中执行逻辑。

想让 Composer 做更多事?你可以通过编写插件来扩展它的行为。Composer 插件允许你在 Composer 执行过程中注入自定义逻辑,比如在安装包时执行特定操作、修改依赖解析方式或添加新的命令。下面带你一步步了解如何创建一个基础的 Composer 插件。
理解 Composer 插件的工作原理
Composer 在启动时会扫描已安装的包,查找标记为插件类型的包,并自动激活它们。插件通过监听 Composer 的事件(如 pre-install-cmd、post-update-dump 等)来运行代码。
要成为一个有效的插件,你的类必须实现 Composer\Plugin\PluginInterface 接口,并定义 activate() 方法,在其中注册事件监听器或绑定服务。
创建一个简单的 Composer 插件
我们来创建一个插件,它会在每次执行 composer install 或 update 后打印一条提示信息。
新建一个目录,例如 my-composer-plugin,然后初始化 Composer 配置:
mkdir my-composer-plugin cd my-composer-plugin composer init2. 设置正确的类型和自动加载
确保 composer.json 中包含以下内容:
{
"name": "your-vendor/my-composer-plugin",
"type": "composer-plugin",
"require": {
"composer-plugin-api": "^2.0",
"composer/composer": "^2.0"
},
"autoload": {
"psr-4": {
"MyPlugin\\": "src/"
}
},
"extra": {
"class": "MyPlugin\\HelloPlugin"
}
}
- type: composer-plugin 是关键,告诉 Composer 这是一个插件。
- extra.class 指定主类路径,Composer 会自动实例化这个类。
- 引入 composer-plugin-api 和 composer/composer 包以获得接口和核心类支持。
创建目录 src/ 并添加文件 HelloPlugin.php:
'onPostInstall',
'post-update-cmd' => 'onPostUpdate',
];
}
public function onPostInstall(Event $event)
{
$event->getIO()->write('Hello from your Composer plugin! ? ');
}
public function onPostUpdate(Event $event)
{
$event->getIO()->write('Updated dependencies – custom plugin reporting in! ? ');
}
}
- 实现 PluginInterface 表示这是一个插件。
- 实现 EventSubscriberInterface 可以订阅 Composer 事件。
-
getSubscribedEvents()定义你要监听的事件及回调方法。 - 使用
$event->getIO()->write()输出带格式的信息。
测试你的插件
在本地测试插件前,先在主项目中通过 repositories 引入它。
编辑你想要测试插件的项目的 composer.json:
"repositories": [
{
"type": "path",
"url": "../my-composer-plugin"
}
]
2. 安装插件
运行命令安装你的插件:
composer require your-vendor/my-composer-plugin @dev
安装成功后,每次运行 composer install 或 update,都会看到插件输出的提示信息。
常见注意事项
- 插件版本兼容性很重要,注意 composer-plugin-api 的版本要求。
- 避免在插件中做耗时操作,会影响整体 Composer 性能。
- 调试时可使用
$io->writeError()输出到错误流,便于排查。 - 生产发布时建议将插件推送到 Packagist,方便他人使用。










