Blog de Gonzalo

COMO CREAR SCRIPTS EN COMPOSER

Hace un tiempo os hablé de composer. Dentro de composer se pueden añadir unos scripts que se pueden asociar a un determinado evento para que sean ejecutados por necesidades de nuestro proyecto.
En este post explico como crear scripts en composer, para automatizar tareas. En términos de composer,puede ser una llamada a un método estático de una clase o cualquier comando ejecutable de la línea de comandos, por ejemplo, un comando de symfony.Los scripts de composer son útiles para ejecutar el código personalizado de un paquete o los comandos específicos de un paquete durante el proceso de ejecución de composer. Hay que tener 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.
Para decirla a composer que scripts hay que durante la ejecución de Composer, hay que añadir una propiedad llamada scripts en el archivo composer.json del proyecto. En esta propiedad se relacionan los eventos de composer con los scripts que se van a ejecutar 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. 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 la clase MyVendor\MyScriptsClass definida en el archivo de configuración anterior:
namespace MyVendor;

use Composer\Script\Event;

class MyScriptsClass
{
    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)
    {
        // ...
    }
}

Eventos de Composer

  • pre-install-cmd: se notifica antes de ejecutar el comando install.
  • post-install-cmd: se notifica después de ejecutar el comando install.
  • pre-update-cmd: se notifica antes de ejecutar el comando update.
  • post-update-cmd: se notifica después de ejecutar el comando update.
  • 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 comandos install/update como durante la ejecución del comando dump-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 comandos install/update como durante la ejecución del comando dump-autoload.
  • post-root-package-install: se notifica después de que se haya instalado el paquete principal, durante la ejecución del comando create-project.
  • post-create-project-cmd: se notifica después de la ejecución del comando create-project.