Los scripts de Composer consisten en callbacks de PHP (definidos como métodos estáticos) o en comandos ejecutables en la consola. Los scripts son muy útiles para ejecutar código o comandos propios del paquete durante la ejecución de Composer.
Ten en cuenta que solamente se ejecutan los scripts del paquete principal, por lo que los scripts definidos en los archivos composer.json
de las dependencias no se ejecutan.
Eventos de Composer
Los scripts se ejecutan al producirse alguno de los siguientes eventos definidos por Composer:
pre-install-cmd
: se notifica antes de ejecutar el comandoinstall
.post-install-cmd
: se notifica después de ejecutar el comandoinstall
.pre-update-cmd
: se notifica antes de ejecutar el comandoupdate
.post-update-cmd
: se notifica después de ejecutar el comandoupdate
.pre-package-install
: se notifica antes de instalar un paquete.post-package-install
: se notifica después de instalar un paquete.pre-package-update
: se notifica antes de actualizar un paquete.post-package-update
: se notifica después de actualizar un paquete.pre-package-uninstall
: se notifica antes de desinstalar un paquete.post-package-uninstall
: se notifica antes de desinstalar un paquete.pre-autoload-dump
: se notifica antes de regenerar la información del cargador automático de clases, tanto durante la ejecución de los comandosinstall
/update
como durante la ejecución del comandodump-autoload
.post-autoload-dump
: se notifica después de regenerar la información del cargador automático de clases, tanto durante la ejecución de los comandosinstall
/update
como durante la ejecución del comandodump-autoload
.post-root-package-install
: se notifica después de que se haya instalado el paquete principal, durante la ejecución del comandocreate-project
.post-create-project-cmd
: se notifica después de la ejecución del comandocreate-project
.
Creando scripts de Composer
Para ejecutar uno o más scripts durante la ejecución de Composer, añade una propiedad llamada scripts
en el archivo de configuración composer.json
del proyecto. El valor de esta propiedad es un array asociativo que relaciona eventos de Composer con los scripts que se ejecutan durante ese evento. Los scripts se indican mediante una cadena de texto o un array, dependiendo de si ejecutas uno o más scripts para ese evento.
Cuando definas scripts, ten en cuenta que:
- Los scripts se ejecutan en el mismo orden en el que se definen (siempre y cuando se notifique el evento al que están suscritos).
- Si asocias más de un script a un mismo evento, puedes mezclar indistintamente callbacks de PHP y comandos de consola.
- Las clases que contienen los callbacks deben poder cargarse mediante el sistema de carga automática de clases de Composer.
Ejemplo de archivo de configuración composer.json
con scripts:
{
"scripts": {
"post-update-cmd": "MyVendor\\MyClass::postUpdate",
"post-package-install": [
"MyVendor\\MyClass::postPackageInstall"
],
"post-install-cmd": [
"MyVendor\\MyClass::warmCache",
"phpunit -c app/"
]
}
}
A continuación se muestra un ejemplo de cómo podría ser la clase MyVendor\MyClass
definida en el archivo de configuración anterior:
namespace MyVendor;
use Composer\Script\Event;
class MyClass
{
public static function postUpdate(Event $event)
{
$composer = $event->getComposer();
// ...
}
public static function postPackageInstall(Event $event)
{
$installedPackage = $event->getOperation()->getPackage();
// ...
}
public static function warmCache(Event $event)
{
// ...
}
}
Cuando se notifica un evento, Composer pasa un objeto de tipo Composer\Script\Event
como primer argumento de tu callback. Este objeto dispone de varios getters para obtener fácilmente otros objetos útiles:
getComposer()
: devuelve una instancia de la claseComposer\Composer
.getName()
: devuelve una cadena de texto con el nombre del evento que se ha notificado.getIO()
: devuelve un objeto que implementa la interfazComposer\IO\IOInterface
y que permite escribir y leer en la consola de comandos.