Composer

En este tutorial aprenderás a configurar los requerimientos de los paquetes de tus aplicaciones, la versión mínima para esos paquetes y a utilizar orígenes alternativos para realizar su descarga; por supuesto lograremos esto utilizando Composer, el manejador de dependencias para PHP.

Al usar Composer podemos instalar un paquete de dos formas: Desde el origen (source) y desde su versión de distribución (dist):

  1. dist: Este es el modo por defecto. En este modo, los paquetes se instalarán desde su repositorio de distribución. Habitualmente ese repositorio será Packagist. Si los paquetes ya se descargaron anteriormente, los tomará de la cache local. Esta versión descarga el paquete en formato zip si está disponible.
  2. source: Este modo es el contrario a dist. Cuando usas source, si el repositorio indicado en la configuración como source está disponible, Composer lo usará para instalar los paquetes. Habitualmente ese repositorio será GitHub, BitBucket o cualquier otro repositorio público. Este sistema es útil si estás modificando ficheros fuente del paquete, ya que puedes indicar incluso un repositorio local. Se usa, por ejemplo, cuando quieres contribuir con un ‘patch’ a un proyecto open source.

La opción source requiere tener configurado Git o un sistema compatible con el tipo de repositorio en el que estén los paquetes.

Puedes modificar la opción por defecto en el fichero de configuración global config.json o para un proyecto concreto en el fichero composer.json con "preferred-install": "source".

Cuando instalas los paquetes, puedes elegir qué nivel de estabilidad quieres como mínimo para las versiones instaladas de cada paquete. Composer instalará la última versión disponible que cumpla con el mínimo nivel indicado de estabilidad.

También puedes configurar el nivel de estabilidad por defecto con el parámetro minimum-stability del fichero composer.json.

Por ejemplo, puedes configurar el mínimo nivel de estabilidad a desarrollo en el fichero composer.json de proyectos que sólo vas a ejecutar en tu entorno local. Por ejemplo, para paquetes de pruebas y desarrollo.

"minimum-stability": "dev"
Y como mínimo Release Candidate en proyectos que vas a pasar a tu entorno de producción:
"minimum-stability": "RC"

Las opciones disponibles son: dev, alpha, beta, RC, y stable.

El valor por defecto es stable. Si Composer no encuentra una versión que cumpla con el valor configurado por defecto en minimum-stability no instalará el paquete.

Antes de que Composer incluyera la opción prefer-stable, la solución ‘más sencilla’ para no tener problemas al instalar paquetes era configurar minimum-stability al nivel más bajo posible, es decir, a dev. (Un ejemplo en estos momentos es la versión 6.* de laravel/framework).

Pero, esa configuración tiene dos inconvenientes:

  1. Estás incluyendo código que ‘acaba de ser programado’. Incluso es posible que estés incluyendo el último ‘commit’. Por tanto, estás poniendo en riesgo la estabilidad de tu aplicación.
  2. Para cada nivel de estabilidad, Composer recorre todas las versiones posibles de ese paquete. Por lo que la velocidad de instalación y actualización de paquetes se reduce enormemente.

A veces necesitamos un paquete para el que no existen versiones recientes marcadas como estables, o peor aún, las únicas versiones recientes que existen son versiones dev que no se instalarán si nuestro minimum-stability está configurado por encima de dev. La solución es usar la opción "prefer-stable": true.

Con la opción prefer-stable le decimos a Composer que preferimos los paquetes estables, pero que si no los hay o los que hay no cumplen con los requerimientos o dependencias, puede instalar aquellos que cumplan con minimum-stability. De ese modo aumentamos el porcentaje de paquetes que se instalarán en su versión stable y sólo se instalará una versión de menor estabilidad cuando sea un requisito de alguna dependencia.

Composer usa un sistema de comodines para calcular la versión de cada uno de los paquetes que instalará en tu aplicación. Ese sistema se aplica a los paquetes configurados en el fichero composer.json y también se puede utilizar en la línea de comandos cuando especificamos un paquete:

# Instalar específicamente la versión 6.0 del framework de Laravel.
"laravel/framework": "6.0"
	
# Instalar cualquier versión mayor o igual a 6.0
"laravel/laravel": "~6.0"

Una vez calculadas las posibles versiones, se comprobará tu configuración de estabilidad y de las posibles opciones, se instalará la versión que cumpla con esas condiciones.

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Diferencias entre composer install y composer update. Lección siguiente Resolviendo problemas con Composer