开发Composer插件需创建类型为composer-plugin的包,实现PluginInterface接口,并在composer.json中指定extra.class入口类,通过监听事件扩展功能,如post-install后执行自定义逻辑。

开发Composer插件主要是为了扩展Composer本身的功能,比如在安装包时执行自定义逻辑、修改依赖解析过程、监听事件等。Composer插件本质上是一个特殊的Composer包,它实现了特定接口,并在被安装后自动激活。
1. 创建一个基本的Composer插件项目
要开发一个Composer插件,首先需要创建一个新的目录并初始化composer.json文件:
- 新建目录,例如:my-composer-plugin
- 运行composer init开始创建配置
在生成的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\\Plugin"
}
}
说明:
- "type": "composer-plugin":告诉Composer这是一个插件类型包
- composer-plugin-api:必须依赖此包,提供插件接口
- composer/composer:核心库,用于访问Composer对象和事件系统
- "extra.class":指定插件入口类,Composer会在激活时实例化这个类
2. 实现插件入口类
创建src/Plugin.php文件,实现Composer\Plugin\PluginInterface:
write('My custom plugin is activated! ');
// 可以在这里注册事件监听器或命令
}
public function deactivate(Composer $composer, IOInterface $io)
{
// 插件被移除时调用
}
public function uninstall(Composer $composer, IOInterface $io)
{
// 插件卸载时调用
}
}
3. 监听Composer事件(可选)
你可以通过事件机制在特定时机执行代码,比如在安装完成后执行脚本。
在activate()方法中添加事件监听:
基于PHP+MYSQL开发,具有完善的企业、信息、产品、文章发布和管理功能,灵活的会员权限控制和会员管理系统,灵活的可视化模版引擎,HTML静态页面生成和多语言支持,丰富的网站辅助工具,用于创建行业商贸信息网站、地方商贸信息门户网站。v5.1版本增加了多项功能,支持了PHP5+MYSQL5环境,前台网站插件开放源码,更利于个性化的商贸网站开发。主要功能模块:企业名录系统 - 企业介绍发布和企业名录
use Composer\EventDispatcher\EventSubscriberInterface;
use Composer\Installer\PackageEvent;
use Composer\Script\ScriptEvents;
public function activate(Composer $composer, IOInterface $io)
{
$eventDispatcher = $composer->getEventDispatcher();
$eventDispatcher->addSubscriber(new class implements EventSubscriberInterface {
public static function getSubscribedEvents()
{
return [
ScriptEvents::POST_INSTALL_CMD => 'onPostInstall',
ScriptEvents::POST_UPDATE_CMD => 'onPostUpdate',
];
}
public function onPostInstall($event)
{
$event->getIO()->write('Running post-install tasks... ');
// 执行你的逻辑
}
public function onPostUpdate($event)
{
$event->getIO()->write('Running post-update tasks... ');
}
});
}
4. 本地测试插件
使用repositories功能在另一个项目中测试你的插件:
在测试项目的composer.json中添加:
"repositories": [
{
"type": "path",
"url": "../my-composer-plugin"
}
]
然后执行:
composer require your-vendor/my-composer-plugin
如果一切正常,你会看到“plugin is activated”的提示信息。
基本上就这些。开发Composer插件不复杂但容易忽略细节,关键是正确设置composer.json和入口类。一旦掌握基础,你可以进一步实现命令扩展、自定义安装器、修改包加载行为等高级功能。









