Composer插件可扩展Composer功能,如监听包安装、修改自动加载、注册命令等。通过创建项目、设置type为composer-plugin、依赖插件API并实现PluginInterface来开发插件。

Composer 插件是一种特殊的 Composer 包,它可以在 Composer 执行过程中钩住特定生命周期事件,从而扩展或修改 Composer 的行为。比如自动加载资源、执行脚本、更改安装逻辑等。如果你希望在包安装、更新或卸载时触发某些操作,开发一个 Composer 插件是合适的方案。
Composer 插件能做什么?
通过实现 Composer 提供的接口,插件可以:
- 监听包的安装、更新、卸载过程
- 修改 autoloader 配置
- 注册自定义命令到 composer CLI
- 注入自定义安装器(Installer)来处理特定类型包
- 执行额外的构建或清理任务
开发一个简单的 Composer 插件
下面是一个基本流程,教你如何创建自己的 Composer 插件。
1. 初始化项目创建一个新的目录并初始化 Composer 项目:
mkdir my-composer-plugin cd my-composer-plugin composer init
填写基本信息时注意设置 "type": "composer-plugin",这是识别为插件的关键。
2. 添加依赖你的插件需要依赖 composer-plugin-api 和 composer/composer。在 composer.json 中添加:
"require": {
"php": "^7.4 || ^8.0",
"composer-plugin-api": "^2.0",
"composer/composer": "^2.0"
}
然后运行:
composer install3. 创建主类并实现 PluginInterface
创建源码目录和主类文件:
mkdir src touch src/MyPlugin.php
编辑 src/MyPlugin.php:
write('Hello from my custom Composer plugin! ');
}
public function deactivate(Composer $composer, IOInterface $io)
{
// 插件停用时执行
}
public function uninstall(Composer $composer, IOInterface $io)
{
// 插件被卸载时执行
}
}
4. 配置 composer.json 支持自动加载
确保你的类可以被自动加载,在 composer.json 中添加 autoload:
SOPHP是一款稳定开源的微信公众平台开发系统,也是基于weiphp开发的第一款商业系统。依托自身强大的钩子功能,她可以帮助大家快速开发出自己想要的微信功能插件,运营近两年来我们收获了上千用户与良好的口碑。作为一个开源产品,希望大家都能参与进来为SOPHP添砖加瓦,SOPHP团队一直都在致力于让SOPHP更加优秀。
"autoload": {
"psr-4": {
"MyVendor\\MyPlugin\\": "src/"
}
}
同时声明插件入口:
"extra": {
"class": "MyVendor\\MyPlugin\\MyPlugin"
}
5. 安装并测试插件
将你的插件发布为私有或公共包,或者使用路径仓库本地测试。
在另一个项目中添加:
"repositories": [
{
"type": "path",
"url": "../my-composer-plugin"
}
]
然后 require 插件:
composer require myvendor/my-composer-plugin:dev-main
如果一切正常,你应该看到输出:
Hello from my custom Composer plugin!
高级功能:监听事件或添加命令
你可以让插件订阅 Composer 的事件,例如在安装完成后执行操作。
修改 activate() 方法:
use Composer\EventDispatcher\EventSubscriberInterface;
use Composer\Script\Event;
use Composer\Installer\PackageEvent;
public function activate(Composer $composer, IOInterface $io)
{
$eventDispatcher = $composer->getEventDispatcher();
$eventDispatcher->addSubscriber($this);
}
public static function getSubscribedEvents()
{
return [
'post-install-cmd' => 'onPostInstall',
'post-update-cmd' => 'onPostUpdate'
];
}
public function onPostInstall(Event $event)
{
$event->getIO()->write('After install tasks...');
}
这样就可以在 Composer 命令执行后运行自定义逻辑。
基本上就这些。Composer 插件机制强大但需谨慎使用,避免影响依赖管理的稳定性。只要遵循规范,你就能扩展 Composer 实现自动化任务、环境配置、代码生成等功能。不复杂但容易忽略细节。









