首先创建插件项目并配置composer.json,然后编写Plugin类实现PluginInterface和EventSubscriberInterface接口,通过订阅PRE_DEPENDENCIES_SOLVING和POST_DEPENDENCIES_SOLVING事件监听依赖解析过程,在onPreSolve和onPostSolve方法中添加日志输出,最后将插件以path方式引入测试项目并运行composer update验证事件触发。

Composer 是 PHP 的依赖管理工具,它允许开发者通过插件系统扩展其功能。如果你想编写一个 Composer 插件来监听依赖解析过程中的事件(比如包被解析、版本被选择等),你可以通过订阅 Composer 的事件系统来实现。
下面是如何编写一个简单的 Composer 插件来监听依赖解析相关事件的完整指南。
1. 创建插件项目结构
首先创建一个目录作为你的插件项目:
mkdir composer-dependency-listenercd composer-dependency-listener
初始化 composer.json:
{ "name": "your-vendor/composer-dependency-listener", "description": "A plugin to listen to dependency resolution events", "type": "composer-plugin", "require": { "composer-plugin-api": "^2.0", "composer/composer": "^2.0" }, "autoload": { "psr-4": { "YourVendorDependencyListener": "src/" } }, "extra": { "class": "YourVendorDependencyListenerPlugin" }}
2. 编写插件主类
在 src/Plugin.php 中创建插件入口类:
'onPreSolve', ScriptEvents::POST_DEPENDENCIES_SOLVING => 'onPostSolve', ]; } public function onPreSolve() { echo "[INFO] 开始解析依赖..."; // 此时 DependencySolver 将要开始运行 } public function onPostSolve(PackageEvent $event) { $operations = $event->getOperations(); echo "[INFO] 依赖解析完成,共 " . count($operations) . " 个操作:"; foreach ($operations as $op) { echo " - " . $op->getOperationType() . ": " . $op->__toString() . ""; } }}
3. 安装并测试插件
在你自己的项目中测试这个插件:
将插件发布到私有或公共仓库,或使用 path 本地方式引入。在目标项目的 composer.json 中添加依赖:
{ "repositories": [ { "type": "path", "url": "../composer-dependency-listener" } ], "require-dev": { "your-vendor/composer-dependency-listener": "*" }}
然后执行:
PatentPal专利申请写作
AI软件来为专利申请自动生成内容
13 查看详情
composer update
当你运行 composer install 或 update 时,应该能看到输出:
[INFO] 开始解析依赖...[INFO] 依赖解析完成,共 X 个操作: - install: drupal/core 9.0.0 - update: symfony/yaml v5.0.0 => v5.1.0 ...
4. 可监听的关键事件说明
Composer 提供多个与依赖解析相关的事件:
ScriptEvents::PRE_DEPENDENCIES_SOLVING:在依赖求解前触发,适合做准备或日志记录。ScriptEvents::POST_DEPENDENCIES_SOLVING:求解完成后触发,可通过 $event->getOperations() 获取安装/更新/删除的操作列表。
注意:Composer 没有暴露“每个包被选中”的细粒度钩子,因为底层使用 solver 算法(由 composer/semver 驱动),不支持中间状态监听。但你可以通过分析最终的 Transaction 操作来反推结果。
5. 进阶:访问内部 Solver(高级用法)
如果你需要更深入控制或调试,可以在插件中通过反射或监听器注入方式尝试访问 ComposerInstallerSolver,但这属于非公开 API,不推荐生产使用。
基本上就这些。通过标准事件机制,你就能有效监听依赖解析的前后状态,用于日志、审计或 CI 分析场景。
以上就是如何编写一个composer插件来监听依赖解析事件的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/571961.html
微信扫一扫
支付宝扫一扫