>

Composer al descubierto

Juanma Cabello     Colaboraciones    05/01/2017


A la hora de llevar a cabo un proyecto, es más que probable que quiéras usar alguna librería que te simplifique tu labor. Por ejemplo, en lugar de crear una clase para tratamiento avanzado de cadenas puedes echar mano de Stringy o si quieres usar un motor de plantillas, por poner otro ejemplo, puedes hacer uso de Plates en lugar de crear tú uno desde cero. Eso si, tener la versión concreta o al día de tus librerias y tenerla descargada e integrada en tu proyecto es una labor tediosa.

Aquí es donde entran los gestores de dependencias y, en nuestro caso en concreto, composer. Un potente y versátil gestor de librerías para tus proyectos que voy a tratar de disgregar para ti.

Instalación

La instalación es bastante simple, solo debes seguir los pasos que proporciona el equipo de composer en esta web.

Si hemos realizado el proceso correctamente habremos copiado el instalador a la carpeta actual, verificado su autenticidad, ejecutado y eliminado. Ahora bien, esto pone el script de composer en el directorio actual pero seguramente querrás que sea un comando disponible a nivel global en tu sistema:

$ sudo mv composer.phar /usr/local/bin/composer

Ya deberías de poder ejecutar composer desde la línea de comandos. Ejecuta composer -V para comprobar que todo ha ido bien.

Uso básico

Para empezar a usar composer basta con que crees un archivo llamado composer.json en el raíz de tu proyecto. Se trata de un archivo en formato JSON (obviamente) en el que irás declarando las dependencias del proyecto. De esta manera si, por ejemplo, quieres hacer uso de monolog bastaría con hacer lo siguiente:

{
"require": {
"monolog/monolog": "1.0.*"
}
}

Esto instalará la última versión disponible de la 1.0 de monolog. Las dependencias que puedes especificar deben estar dadas de alta en la web packagist que es de donde bebe composer. Una vez que tengas tus dependencias declaradas deberás ejecutar composer install para que composer las instale. Todas las dependencias se instalarán en una carpeta que aparecerá en tu raíz llamada vendor. También puedes hacer un composer require monolog/monolog incluirá en el fichero las líneas que comentábamos.

Después de esto, si quieres usar las dependencias, debes incluir el autoload generado por composer. Este reside en el raíz de la carpeta vendor, suponíendo que lo quieras incluir desde un index.php ubicado en el raíz del proyecto:

<?php 
require __DIR__ . '/vendor/autoload.php';

Uso avanzado

Si deseas actualizar las dependencias de tu proyecto, con composer es tan fácil como hacer composer update. Has de tener en cuenta la nomenclatura a la hora de definir qué versión quieres instalar, por ejemplo, si quieres la última revisión de la versión 1 deberías de especificarlo como 1.*, si quieres la versión 1.2 con todos sus parches sería 1.2.* o si quieres la última subida al repositorio deberás poner dev-master. Si quieres saber más acerca de esta nomenclatura echa un ojo a la web de semantic versioning.

Otro truco bastante útil es la posibilidad de definir paquetes que solo necesitas en el entorno de desarrollo. Funciona igual que la sección require del composer.json solo que la etiqueta pasa a llamarse require-dev. Por defecto composer instala todas las librerías, pero teniendo esta estructura puedes hacer composer install --no-dev e instalar las dependencias necesarias solo para producción.

Otra característica muy interesante es la posibilidad de poder declarar repositorios personalizados. Por ejemplo:

{
"repositories": [
{ "type": "vcs", "url": "https://github.com/Seldaek/monolog" }
]
}

Con esto le estaríamos diciendo a composer que monolog lo tiene que descargar desde github. Si por lo que sea estás desarrollando una librería y la quieres probar en un proyecto de prueba, puedes declarar el repositorio apuntando al repositorio local evitando así tener que subir a github o algún otro sitio sin tener la librería libre de bugs.

Por último, puedes especificar un mapeo de un namespace concreto a la carpeta que desees:

{
    "autoload": {
        "psr-4": {
            "MyApp\\": "app/"
        }
    }
}

Así, la raíz del namespace MyApp queda fijada a la carpeta app del proyecto. Ten en cuenta que si realizas algún tipo de cambio en ésta sección deberás actualizar el autoload. Para ello ejecuta:

$ composer dump-autoload

Esto actualizará el archivo y todo seguirá funcionando con normalidad.

Conclusión

Aquí te he dejado unas pautas básicas sobre cómo funciona y cómo usar composer, además de algunos truquitos bastante útiles… ¡Pero composer es mucho más! Te recomiendo encarecidamente que le eches un ojo a su web oficial y que leas la documentación para descubrir muchas más funcionalidades muy útiles a la hora de gestionar las dependencias de tu proyecto.

¿Conocías este tipo de programas? ¿Usabas ya composer? ¿Te has encontrado con algún problema? ¡Dínoslo en los comentarios!


Sobre el autor

Juanma Cabello   

Fullstack developer. Coordinador del @betabeersMLG. Amante de la SEGA de los 90s. Pareja de @imggallardo 24/7