Manejo de Dependencias en PHP con Composer

Logo Composer PHPComposer es un manejador de dependencias para PHP, este proyecto inspirado en npm y Bundler y sirve para administrar librerías de terceros o propias en nuestros proyectos de PHP.

Composer es capaz de de instalar las librerías que requieres para tu proyecto con las versiones que necesites y si esas librerías dependen de otras también es capaz de resolver las dependencias y descargar todo lo que necesites para que funcione, quitándonos el dolor de tener que hacer esto manualmente y mantenerlo todo actualizado.

Instalar Composer

Composer está formado por dos partes, la primera es una aplicación de línea de comandos que permite encontrar, descargar, actualizar y compartir los paquetes o librerías y el otro es el repositorio donde se guardan dichos paquetes o librerías.

Para instalar Composer solo debes ejecutar en el terminal:

cd /ruta_a_tu_proyecto_php
curl -s https://getcomposer.org/installer | php

Si NO tienes curl instalado puedes ejecutar:

php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"

Lo que hace este instalador es chequear que tu php.ini esté configurado con lo necesario y de lo contrario te arrojará un error.

[alert_yellow textalign=”left”] Composer es un archivo ejecutable Phar por lo que debes tener habilitado phar dentro del php.ini, si no lo tienes simplemente descomenta extension=phar.so. [/alert_yellow]

Luego para comprobar que se instaló correctamente puedes ejecutar

php composer.phar

Si todo salió bien debe desplegar una lista de las opciones del comando.

Si quieres ejecutar Composer globalmente ejecutamos este comando adicional:

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

Con esto podremos ejecutar directamente el comando desde cualquier sitio o proyecto, por ejemplo:

composer about

Utilizando Composer

Como mencionamos anteriormente Composer está basado en Bundler y npm por lo que su uso es muy parecido a estas herramientas.

Para indicar las dependencias de tu proyecto debes crear un archivo llamado composer.json que en su forma más básica debe verse así:

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

Veamos sus partes:

  • require: esta palabra simplemente le dice a Composer que necesitamos la libreria que le indicamos dentro de los corchetes {}
  • Nombre del paquete o libreria: está separado en dos partes vendedor/proyecto, normalmente estos dos son iguales como en este caso o pueden ser distintos por ejemplo “illuminate/foundation”.
  • Versiones del paquete: después de los dos puntos ( : ) indicamos la versión que queremos de este paquete. Tenemos varias opciones:
    • Versión exacta: podemos decirle a Composer que queremos una versión específica como por ejemplo 1.0.1.
    • Rango: Podemos definir rangos de versiones con los operadores >, >=, <, <=, !=. Por ejemplo si queremos una versión mayor a la 2 colocariamos >2. También podemos definir entre dos versiones separando con comas, por ejemplo >=1.0, <2.0.
    • Comodín: podemos usar el comodín ( o wildcard ) * para definir versiones, como ejemplo 1.0.* esto quiere decir cualquier versión dentro de 1.0 ( 1.0.1, 1.0.2 … 1.0.8 etc.)
    • Por último tenemos el operador ~, es un poco dificil de explicar así que usaremos un ejemplo: tenemos una librería que tiene la versión 1.x y 2.x pero no son compatibles entre ellas y queremos la última de 1.x y no la de 2.x entonces utilizaríamos el operador de esta forma ~1.2 que es equivalente a >=1.2, <2.0, mientras si vamos a algo más específico como ~1.3.1 es equivalente a >=1.3.1, <1.4.

Como vemos podemos ser tan libres o específicos como queramos, y me falto mencionarles que si no nos importa la versión simplemente podemos colocar “*”.

Instalando las Dependencias

Una vez que tengas configurado tu archivo composer.json con todos los paquetes que requiere tu proyecto es hora de que Composer haga su trabajo y lo instale para esto ejecutamos:

php composer.phar install

O si seguiste mi consejo e instalaste Composer como un comando global (ver arriba) puedes ejecutar:

composer install

Una vez que termina de descargar los paquetes los coloca dentro de una carpeta llamada vendor por defecto esto lo podemos cambiar en nuestro archivo composer.json agregando las siguientes líneas:

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
    "config": {
        "vendor-dir":"librerias"
    }
}

Aquí especificamos librerias como el directorio a donde se descargan los paquetes. 

[alert_green textalign=”left”]Tip: Si estás utilizando git para tu proyecto, probablemente quieras agregar vendor (o el directorio que hayas especificado) dentro de .gitignore. Con esto evitamos agregar el código adicional a nuestro repositorio sin necesidad. [/alert_green]

Si queremos actualizar las librerias ejecutamos:

php composer.phar update

O si está como comando global:

composer update

Autoloading

Ademas de descargar las librerias, Composer también prepara un archivo de autoload que es capaz de autocargar todas las clases en cualquiera de las librerías descargadas. Para utilizarlo, simplemente añadimos la siguiente línea en nuestro código:

require 'vendor/autoload.php';

[alert_red textalign=”left”] Por supuesto que si cambiaste el directorio de descarga lo tienes que actualizar en esta línea. [/alert_red]

Repositorios

Si quieres ver los paquetes disponibles puedes visitar el repositorio en https://packagist.org/

Conclusión

Esto es todo por ahora, Composer a mi parecer es una herramienta que hacia mucha falta en PHP, muchos frameworks como FuelPHP, CodeIgniter, Symfony2 y Laravel ya están integrando Composer.

Además es una gran herramienta para utilizar tanto en desarrollo como en producción y que nos ahorra una gran cantidad de trabajo de manejo y mantenimiento.

Aquí solo he tocado la superficie de la configuración puedes ver mucho más en la Documentación.

Me gustaría saber que opinan de esta herramienta y si la está usando o la planean utilizar en sus proyectos, por favor dejen sus comentarios.

Recursos

[list_check]

[/list_check]

 

2 comentarios