Composer, el gestor de dependencias para PHP

logo-composer-transparent

Composer se define como un gestor de dependencias para PHP que nos permite incorporar librerías y código de terceros a nuestro proyecto de manera sencilla.

Las ventajas que aporta esta herramienta son:

  • Repositorio de código organizado en paquetes (packagist)
  • Gestión de las dependencias (instalamos un paquete y Composer se encarga de instalar las dependencias)
  • Mecanismo de autoloading
  • Facilidad para instalar versiones especificas de paquetes y versiones selectivas según semántica de versionado
  • Facilidad para actualizar los paquetes instalados y sus dependencias

Para empezar a usar composer hay que obtenerlo de su página web, una vez instalado estamos listos para empezar a instalar paquetes en nuestro proyecto.

Configuración: composer.json y composer.lock

composer.json es el archivo de configuración, normalmente en la raíz de nuestro proyecto, que contiene los paquetes instalados por Composer y sus dependencias. A la hora de especificar versiones de paquetes tenemos la opción de usar operadores que nos permiten especificar rangos de versiones a instalar y actualizar, lo cual nos facilita seleccionar versiones de desarrollo, producción o ramas para cada paquete.

composer.lock contiene las versiones exactas de cada paquete instalado. Puesto que composer.json no tiene porque indicar versiones determinadas, este archivo es útil para sincronizar versiones a la hora de instalar nuestro proyecto. Si un composer.lock existe, Composer empleará las versiones de paquetes en dicho archivo ignorando a composer.json en una instalación de proyecto (ejecución del comando composer install).

Aclarar que con instalación de proyecto nos referimos a lo siguiente; Composer guarda todos sus paquetes en una carpeta determinada (vendor/), una práctica común a la hora de compartir nuestro proyecto en diferentes localizaciones (desarrollo colaborativo, subirlo a un host o a un repositorio remoto de git) es la de omitir la copia de dicha carpeta. Una vez realizada la copia de nuestro proyecto se ejecuta el comando composer install y este descargará todos los paquetes en vendor/ que correspondan leyendo composer.json o composer.lock.

Instalando y actualizando paquetes

Para empezar a instalar o administrar paquetes tenemos que tener un archivo composer.json y opcionalmente un composer.lock. Cuando comenzamos un proyecto por primera vez no tenemos ninguno de estos archivos, y el primer paso para instalar paquetes es precisamente introducirlos en el archivo composer.json.

Tenemos tres opciones para insertar paquetes en composer.json, la primera consiste en ejecutar el comando composer init el cual nos guiará para configurar y añadir paquetes a nuestro proyecto.

La segunda consiste en editar el archivo composer.json añadiendo entradas en la llave require. Por ejemplo, para instalar el paquete alice, tendríamos un composer.json tal que:

Para encontrar el par “paquete” : “versión” tendremos que buscar dicho paquete en packagist, escoger versión y copiar el campo require. Como ejemplouna captura que muestra la entrada para require de alice en packagist:

require-comp

La tercer opción es usar composer require nombre_del_paquete:version o composer require a secas. Este último comando nos permitirá la búsqueda de paquetes de manera interactiva desde la interfaz de comandos.

Una vez tengamos nuestro composer.json sólo nos resta ejecutar composer install y se descargarán nuestros paquetes junto a sus respectivas dependencias en el directorio vendor/.

Podremos añadir nuevos paquetes en cualquier momento y ejecutar composer update, el cual, además, actualizará los paquetes ya existentes en caso de ser necesario.

Si queremos, una forma de actualizar selectivamente paquetes es hacer uso de composer update nombre_del_paquete

Usando el autoloader de Composer

Otra de las ventajas de Composer es que implementa un sistema de autoloading de clases que se autoconfigura cada vez que instalamos o actualizamos paquetes. Este sistema cumple las especificaciones PSR y es muy sencillo de incorporar en nuestra aplicación, básicamente tenemos que incluir un require  o include en nuestro código que apunte a vendor/autoload.php.

Como ejemplo, la siguiente aplicación, con estructura:

Siendo el código:

composer.json

src/App/VBlog.php

src/App/Foo.php

app.php 

Viendo el código nos hacemos a la idea de como podemos estructurar de forma muy básica una aplicación haciendo uso de Composer y vemos como el uso del autoloader nos facilita la carga de clases sin necesidad de conocer sus localizaciones en el sistema de ficheros.

Si nos fijamos bien, tal como tenemos configurado Composer, el autoloading se limita a funcionar para aquellas clases incluidas en los paquetes dentro de la carpeta vendor/. Afortunadamente Composer contempla la posibilidad de hacerse cargo del autoloading de nuestro código de forma sencilla mediante la llave de configuración “autoload” dentro de composer.json.

Para incorporar autoloading en nuestro código en el ejemplo anterior sólo tenemos que modificar composer.json de la siguiente manera:

Ahora podemos ahorrarnos los requires de nuestro app.php, quedando su código tal que:

El último paso sería ejecutar composer update y ya tendremos nuestro autoloading funcionando.

 

Acerca de

Ver todas las entradas de