Composer al igual que npm de NodeJs o bundler en Ruby, es un gestionador o manejador de dependencias de paquetes o librerías, pero para el lenguaje PHP. Composer es el estandar defacto para la gestión de dependencias en el desarrollo en PHP moderno. En este artículo, veremos como usar Composer.
Composer instala los paquetes por defecto de manera local, o según los requerimiento de nuestro proyecto en PHP.
Pero... ¿De donde trae los paquetes Composer?
Composer busca los paquetes en su principal repositorio, llamado Packagist: http://packagist.org.
Populares librarias y framework gestionados por Composer
Usando Composer podremos instalar paquetes de PHP tales como:
- phpExcel
- Twitter Bootstrap
- Laravel
- PHING
- kint (permite hacer un debug por pantalla)
- PHPMailer
- tinymce
- phpMyAdmin
- phpunit
- Doctrine
- Codeigniter
- Symfony
- HTML2PDF
- Smarty
- Parsedown http://parsedown.org
kint es una alternativa al debugging tipo:
var_dump($variable);die(__FILE__.__LINE__);
donde sólo necesitaremos escribird($variable);
e incluso producirá una salida con mejor formato.
Requerimientos para Instalar Composer
- PHP 5.3.2 o superior.
- Git para manejar la gestión de repositorios.
Instalar Composer en Mac OS X
Composer viene empaquetado como un archivo PHAR de PHP:
composer.phar
archivos que necesitan de PHP para su ejecución, es decir, se ejecutarán bajo la sintaxisphp composer.phar
.
Antes de instalar Composer es prudente comprobando si ya lo tenemos instalado. Esto se hace simplemente con el comando:
composer --version
Lo recomendado es hacer la instalación de Composer, de modo que funcione como si fuera un comando más dentro de nuestro equipo. En este caso, usaremos Homebrew de la manera fácil:
brew install composer
O usando:
brew install homebrew/php/composer
Si tenemos problemas con lo anterior, entonces usaremos:
brew upgrade
brew update
brew tap homebrew/dupes
brew tap homebrew/homebrew-php
brew install php70
brew install mcrypt php70-mcrypt
brew install composer
Así, lograremos tener disponible el comando de Composer.
En Microsoft Windows, Composer se descarga como un archivo ejecutable y su instalación es directa, simplemente ejecutando el archivo.
Cómo usar Composer
Para iniciar Composer en un proyecto, es similar a Git:
composer init
El comando anterior nos llevará paso por paso en el proceso de establecer el archivo de configuración de Composer, usado para nuestro proyecto PHP.
Este archivo de configuración generado con el comando composer init
, controlará la forma de operar de Composer. Este archivo de configuración está en formato JSON con el nombre de composer.json
, similar al Gemfile
de Ruby o el package.json
de NodeJS.
Podemos editar el archivo composer.json
, como veremos más adelante, para instalar los paquetes según este archivo de configuración. Hacer la instalación con Composer es simplemente ejecutar el comando:
composer install
Generalmente, se instalarán en un directorio llamado vendor/
.
Como ya hemos dicho, la lista de paquetes que maneja Composer la podemos ver en la web
packagist.org
.
Pero ¿Cómo modificamos el archivo de configuración de Composer?...
composer.json
Modificando el archivo Para trabajar con Composer debemos aprender a editar el archivo composer.json
ya que es el que controla cuales paquetes instalar. La agregación de paquetes a nuestro proyecto van en la línea require
del archivo:
{
/* algún código anterior */
"require": {
"smarty/smarty": "3.1.*"
}
}
En este caso, este archivo de configuración composer.json
le dice a Composer que instale el paquete llamado smarty
en cualquier versión de la 3.1
(eso nos indicar la expresión 3.1.*
). Y si este paquete smarty
requiere de otros paquetes, y estos últimos a su vez de otros en una dependecia en cascada, también Composer los instalará tomando cuidado de la versión que le hemos señalado.
Se pueden usar varias opciones para especificar versiones, por ejemplo: Empleando operadores lógicos para definir un rango
">=3.1.0"
o">=3.1.0, <4.0.0"
, una opción igual a la última sería"^3.1.0"
. También se pueden definir versiones del tipo"~3.1.0"
.
Composer también hace uso exclusivo de un archivo llamado
composer.lock
, donde controla el versionado de las dependencias y sub-dependencias según los paquetes establecidos en la instalacióncomposer.json
.
Así para traer la librería a nuestro proyecto, ejecutamos el comando:
composer install
Esto traerá la librería a la carpeta vendor/
, creada por Composer junto con la creación de un nuevo archivo en formato JSON llamado composer.lock
. Donde el archivo composer.lock
fijará las versiones de los paquetes que hemos instalado y su vez de sus dependencias internas, para evitar conflictos posteriores.
Actualizar las versiones de los paquetes
Se advierte que se debe evitar usar el comando composer update
sin especificar el paquete, pues en ese caso Composer intentará actualizar todos los paquetes de nuestro proyecto, lo cual será causa probable donde sucedan incompatibilidades. Por lo tanto, se recomienda usar el comando:
composer update nombre_paquete
Hacer que Composer elija la mejor versión del paquete
composer require nombre_paquete
Esto producirá que Composer busque la mejor versión del paquete que no rompa con nuestras dependencias actuales.
Composer implementa un Autoloader
El Autoloader que implementa Composer está adherido al estandar psr-4
. Por ejemplo, podemos definir un namespace para nuestra aplicación:
{
/* algún código anterior */
"autoload": {
"psr-4": {
"MiDominio\\": "app/models/"
}
}
}
En este caso, el namespace es MiDominio
(los namespaces se definen con \) que fijará la carpeta app/models/
como el lugar donde comenzar a buscar nuestras clases.
Cabe mencionar, que los paquetes cargados por Composer ya vienen con su funciones de Autoload.
Composer puede crear las funciones autoload de nuestro proyecto, definidas en el composer.json
, usando cualquier de los siguientes comandos:
composer dump-autoload
composer dumpautoload
composer dump
Es decir, Composer nos evita el trabajo de crear las funciones de autoload para nuestro proyecto.
Crear esqueletos de proyectos
Composer también nos permite crear la estructura inicial (esqueleto) de un proyecto en Laravel, usando el comando:
composer create-project laravel/laravel miproyecto
O en el caso, que desearamos emplear el framework Codeigniter:
composer create-project codeigniter/framework
Tips
Algunos consejos a tener en cuenta, cuando se emplea Composer:
-
Asegurarse que al guardar el archivo
composer.json
se efectue con codificaciónUTF-8
, sobre todo si estamos trabajando en Windows. -
Evitar usar el comando
composer update
, ya que puede romper el código de nuestro proyecto.
Conclusión
Aunque hemos explorado superficiente la funcionalidad de Composer, pues este paquete dispone de un extenso conjunto de comandos, que se sugiere revisar en su web https://getcomposer.org.
Un flujo de trabajo simple con Composer, sin preocuparnos de versiones sería:
- Ubicarnos en la carpeta de nuestro proyecto y ejecutar:
composer init
- Luego determinar cuales son las librerías externas de PHP que necesitamos instalar en nuestro proyecto. Por ejemplo, si necesitamos la librería phpMailer y HTML2PDF, entonces vamos a la web de Packagist para encontrar los comandos de Composer para instalar dichos paquetes:
composer require phpmailer/phpmailer
composer require spipu/html2pdf
La sintaxis precisa del comando lo vemos en la homepage Packagist correspondiente a phpMailer y HTML2PDF: https://packagist.org/packages/phpmailer/phpmailer.
Esto además de cargar los paquetes en el directorio vendor
, nos modificará el archivo composer.json
para expresar la dependencia requerida, y el archivo composer.lock
donde se fijarán las versiones efectivamente cargadas de todos los paquetes. Todo esto de modo desatendido para el usuario.
- Finalmente si deseamos compartir nuestro proyecto, solamente tendremos que usar los archivos JSON de Composer, sin preocuparnos de enviar estos paquetes externos pues Composer puede gestionarlos autonomamente.
composer dump
No cabe duda que Composer es una tremenda herramienta que nos facilita notablemente el trabajar con librerías de PHP externas a nuestro proyecto.
Referencias
Homepage de Composer: https://getcomposer.org, https://getcomposer.org/doc/04-schema.md. Repositorio de Paquetes de Composer: https://packagist.org.
Cómo solucionar errores habituales de Composer: https://librosweb.es/tutorial/como-solucionar-los-errores-habituales-de-composer/.
Errores más comunes en Composer: https://es.stackoverflow.com/tags/composer/hot.
Instalar y actualizar paquetes con Composer: https://styde.net/instalar-y-actualizar-paquetes-con-composer/.
Referente de Laravel y Composer: https://styde.net/blog/.