Composer, un administrador para instalar dependencias en proyectos PHP

noviembre 03, 2020 , 0 Comments

Hace pocos días se dio a conocer el lanzamiento de la nueva version de Composer 2.0, el cual es un administrador para instalar dependencias en proyectos PHP.

Composer, se destaca por permitir al usuario el determinar qué bibliotecas de funciones son necesarias para que el proyecto funcione, después de lo cual se encarga del trabajo de instalar las dependencias faltantes y actualizar nuevas versiones.

Las bibliotecas disponibles para la instalación se encuentran en el repositorio de Packagist, que contiene más de 287 mil paquetes.

Sobre Composer

Composer se posiciona como un sistema de instalación de dependencias diseñado con los administradores de paquetes npm y bundler en mente en las comunidades Node.js y Ruby.

El sistema opera con paquetes en relación con proyectos específicos y está diseñado para instalar dependencias en directorios de proyectos locales (como opción, también hay un modo de instalación global para todo el sistema).

De forma predeterminada, se sugiere la instalación de bibliotecas estables, pero también es posible utilizar actualizaciones experimentales (alfa / beta) e instantáneas (instantáneas del código base de desarrollo), que son útiles para organizar compilaciones de prueba en sistemas de integración continua.

El código de Composer está escrito en PHP y se distribuye bajo la licencia MIT.

Sobre la nueva version de Composer 2.0

En la nueva version se han realizado importantes optimizaciones de rendimiento y se ha reducido el consumo de memoria. Se ha reelaborado mucho, desde el protocolo para llamar a packagist.org hasta los métodos para determinar dependencias.

Se proporciona la carga en varios flujos de metadatos y archivos zip, además de que se implementó el modo de instalación paralela de paquetes. Se agregaron optimizaciones al código para los cálculos. Al cargar solo los metadatos del paquete, las operaciones de requerir y/o eliminar y las actualizaciones parciales se aceleran significativamente. En algunos proyectos se observa una aceleración de hasta el 50%.

El mecanismo para actualizar las dependencias ha sido reelaborado, que está libre de vinculaciones con el estado del directorio en el sistema de archivos local. Después de completar la actualización, el proceso de instalación ahora comienza automáticamente con la ejecución preliminar de todas las operaciones que requieren acceso a la red.

Realizar operaciones de red antes del inicio de la instalación real elimina la aparición de directorios actualizados de forma incompleta en caso de una falla de la red durante el proceso de instalación. Siempre que sea posible, las descargas de red se realizan en varios subprocesos.

De forma predeterminada, se agrega una etapa de verificación de plataforma adicional al tiempo de ejecución al inicializar vendor/autoload.php, que verifica que la versión de PHP y las extensiones utilizadas coincidan con las versiones admitidas en las dependencias. Si hay una discrepancia, se muestra un error.

La validación se realiza utilizando la nueva clase Composer\InstalledVersions, que se carga para cada proyecto para determinar qué paquetes y versiones están disponibles en el proyecto.

Además, se menciona que los mensajes de error reelaborados relacionados con problemas de detección de dependencia.  Estos mensajes son más cortos, más claros y con menos duplicados.

Para limitar temporalmente las versiones durante la actualización, utilice la construcción «Composer update vendor/package: 1.0. *», que no cambiará el contenido del bloque en «composer.json y no marcará el archivo bloqueado como obsoleto.

De los demás cambios que se destacan de esta nueva version:

  • Se agregó soporte para actualizaciones parciales con límites de tiempo, que se pueden usar cuando necesita actualizar o revertir temporalmente una versión de un paquete para probar o esperar una corrección de errores. Se implementó la eliminación automática de paquetes que ya no son necesarios.
  • Solo se han agregado nuevas opciones, excluir y canónicas al repositorio.
  • Se agregaron nuevos eventos antes de las operaciones, ejecución, creación previa del grupo y descarga posterior del archivo.
  • Se han agregado una gran cantidad de banderas nuevas.

Finalmente, si estás interesado en conocer mas al respecto sobre esta nueva version, puedes consultar los detalles en el siguiente enlace.

Por otra parte, si quieres consultar la documentación, puedes hacerlo desde este enlace.


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.