Composer V2 está a la vuelta de la esquina, ¿queeeeeee?, ¿como que la vuelta de la esquina?, así es, aún no está disponible de forma oficial debido a que el equipo de desarrollo está terminando la versión beta pero muy pronto estará disponible.

Personalmente lo he probado y es increíble, trae consigo varias mejoras y promete muchas cosas más que justo hoy te voy a compartir en este artículo.

Cabe aclarar que esta nueva versión de composer será compatible con la mayoría de flujos de trabajo y podrás utilizarlo sin problema con tus proyectos existentes.

Novedades de Composer V2

Tiempos de descarga más rápidos

¿Te ha pasado que en ocasiones Composer tarda años en descargar paquetes?, seguro a todos nos ha pasado aunque tengamos buena conexión a internet.

Aquí hay una comparación entre el Composer v1.10.5 y la versión 2 (40a35ab) para ejecutar composer require laravel/laravel. La prueba se realizó en un caché vacío, seguido de una nueva prueba una vez que el caché está cebado. Los resultados de la prueba son el promedio de 5 ejecuciones en hardware de consumo.

Composer v2 fue casi 2 veces más rápido de instalar laravel/laravel sin almacenamiento en caché.

Este mejoramiento es gracias a que han trabajado en desarrollar un sistema de descarga en segundo plano. También es gracias a que los paquetes ahora se van a descargar en una versión comprimida (zip) para reducir su peso.

Ahora Composer v2 utilizará  HTTP/2 y compartirá sesiones TLS y respuestas DNS entre solicitudes HTTP para acelerar las descargas. ¡¡¡UFFFF!!! 😀

Soporte parcial fuera de línea

Con el fin de reducir considerablemente las peticiones que realiza Composer para descargar paquetes se ha integrado un sistema caché mejorado para realizar las descargas desde el archivo composer.lock.

Esto es recomendado para redes de baja calidad y es necesario definir COMPOSER_DISABLE_NETWORK en su archivo de entorno para que Composer quede offline.

Ahora, cada vez que realices instalaciones con Composer, verás el siguiente mensaje:

https://repo.packagist.org could not be fully loaded (Network disabled, request canceled: https://repo.packagist.org/packages.json), package information was loaded from the local cache and may be out of date

Y si el paquete no está disponible en caché, recibirás el siguiente error:

The required git reference for ayesh/php-timer is not in cache and network is disabled, aborting

Nuevos parámetros para composer install y update

Ahora en Composer V2 tendremos la opción de mandar el parámetro –dry-run a los comandos composer update y composer install para evitar que Composer realice cambios en nuestro código y solo muestre el output en la terminal.

Esto es genial para evitar que Composer haga cambios no deseados en nuestro proyecto 😀

Confirmación para ejecutar Composer como usuario root

Anteriormente solo recibíamos una alerta al momento de ejecutar Composer como un usuario con privilegios root.

Ahora todo cambia, Composer te obligará a que confirmes que quieres ejecutarlo como usuario root. Esto es con el objetivo de reducir comportamientos no deseados en nuestros proyectos, ¿está genial no?.

Do not run Composer as root/super user! See https://getcomposer.org/root for details Continue as root/super user [yes]?

Nuevo formato de metadatos para repositorios

Composer V2 ahora admite un nuevo formato de metadatos para los paquetes de Packagist.org.

{
    "packages": [],
    "metadata-url": "/p2/%package%.json",
    "provider-includes": {...}
    ...
}

Cuando metadata-url está presente, Composer v2 utilizará el nuevo punto final y desde ese nuevo punto se realizarán las peticiones. Composer v1 continuará utilizando el enfoque estándar.

Soporte canónico, de filtrado y de permisos para múltiples repositorios

Packagist.org es el repositorio predeterminado para Composer. Pero eso no significa que no puedas utilizar otros repositorios en tu proyecto.

Drupal tiene su repositorio oficial de Composer, y WordPress tiene un repositorio no oficial, y quizás en algún momento te gustaría agregar el tuyo o el de alguna empresa en especifico.

Composer sabe esto y ahora lo han integrado en esta nueva versión, cuando Composer busca un paquete, consulta todos los repositorios configurados y finalmente, el repositorio predeterminado, que es packagist.org (a menos que esté configurado de otra manera).

El objetivo de este cambio es que los developers tengan más control sobre el manejador de dependencias de PHP.

Prioridades del repositorio

En tu archivo composer.json podrás configurar tus repositorios y también asignarles la prioridad conforme los agregues (al estilo de cascada).

Repositorios canónicos

Composer v2 considerará que todos los repositorios son canónicos, esto quiere decir que si configuraste X repositorio primero y después configuraste el segundo repositorio y ambos comparten un paquete idéntico, Composer le dará prioridad al que configuraste primero y no podrás instalar ningún otro paquete igual adelante.

Esto ayuda a evitar instalaciones accidentales de paquetes idénticos y por ende, evitar colisiones en nuestros proyectos.

Esto me imagino que es debido a que agregaron la posibilidad de agregar múltiples repositorios y para evitar millones de errores con esto lo solventaron, buena jugada.

Filtrado de repositorios

Composer v2 admite only y exclude en la configuración de los repositorios. Con esto le indicamos a Composer que solo busque paquetes con una coincidencia exacta o una coincidencia de patrón en dichos repositorios.

{
    "repositories":[
        {
            "type":"composer",
            "url":"https://packages.drupal.org/8",
            "only": ["drupal/*"]
        },
        {
            "type":"composer",
            "url":"https://wpackagist.org",
            "only": ["wpackagist-plugin/*", "wpackagist-theme/*"]
        }
    ],
}

En el ejemplo pasado buscará paquetes que coincidan drupal/*en el repositorio de Drupal wpackagist-plugin/*y wpackagist-theme/*en los repositorios de WPackagist. Si estos repositorios alojan paquetes para otros nombres de proveedores, no se buscarán ni se utilizarán.

Por el momento estas son las mejoras que han dado a conocer, en cuanto tenga más actualizaciones actualizaré el artículo para tenerlo fresco y con la nueva información.

¡Prueba Composer v2 ahora!

Puedes probar Composer V2 simplemente ejecutando composer self-update --snapshot. Si tiene complementos que no funcionan, se pueden deshabilitar temporalmente con composer --no-plugins.

Fuente: php.watch

Composer ha revolucionado PHP de una forma muy drástica y el hecho de que lancen una nueva versión para su manejador de dependencias quiere decir que PHP está creciendo y madurando cada día más, esto me pone muy feliz, ¡GRACIAS A TODA LA COMUNIDAD DE PHP!.