package-events按包触发,用于定制化包操作;command-events按命令触发,适用于项目级任务。前者如pre-package-install在安装单个包前执行,后者如pre-install-cmd在composer install命令开始前运行,选择取决于操作层级。

Composer 的事件系统分为两类:一类是 package-events,另一类是 command-events。它们触发的时机和用途不同,理解区别有助于正确使用钩子逻辑。
package-events(如 pre-package-install)
这类事件与包的安装、更新、卸载等操作直接相关,在处理具体包时触发。 它们在执行依赖解析后,对每个将要操作的包逐个触发。- pre-package-install:在某个具体包即将安装前触发
- post-package-install:在某个包安装完成后触发
- pre-package-update:在更新某个包之前触发
- post-package-update:在更新完成后触发
- pre-package-uninstall:在卸载某个包前触发
- post-package-uninstall:在卸载后触发
PackageEvent 对象,可以获取当前正在处理的包信息(名称、版本等),适合用于针对特定包的定制化操作,比如生成配置、记录日志或条件性跳过某些包。
command-events(如 pre-install-cmd)
这类事件绑定到 Composer 命令的执行流程,在命令开始或结束时触发。 它们不针对具体包,而是作用于整个命令生命周期。-
pre-install-cmd:在
composer install执行前触发 -
post-install-cmd:在
install完成后触发 -
pre-update-cmd:在
update命令开始前触发 -
post-update-cmd:在
update完成后触发 - 其他如
pre-dump-autoload、post-dump-autoload等也属于此类
ScriptEvents 类定义,回调函数接收到的是命令执行上下文,而不是具体的包。










