En este artículo vamos a explicar los errores frecuentes que puedes encontrar en el trabajo con Composer, el gestor de dependencias de PHP, que pueden ahorrarte algún que otro problema.
Este artículo es simplemente una lista de situaciones que pueden acarrear problemas en el uso de Composer en el día a día. Lógicamente, esta lista es solo un compendio de las cosas que me han ocurrido personalmente, por lo que igual no está tu problema aquí. (Si encuentras novedades que sirvan para ayudar a otras personas puedes publicarlas como comentarios)
Recuerda que en DesarrolloWeb.com hemos hecho un Manual de Composer que cubre los aspectos más básicos de su uso y configuración. Si no conoces Composer y trabajas con PHP debes de aprender ya mismo!
Mantener actualizado composer
Aparte de actualizar las dependencias, acuérdate de actualizar el propio Composer. Una de las primeras recomendaciones que te ofrecen en la guía de Composer es que ante cualquier problema te asegures primero de estar ejecutando la versión más nueva del software. Lo consigues con un comando de auto-actualización o auto-update.
composer self-update
Recuerda que quizás tengas que ejecutar ese comando como superusuario (sudo composer self-update). Recuerda también que si tu instalación de composer no es global posiblemente tengas que invocar llamando directamente a composer.phar a través del intérprete de PHP (php composer.phar self-update). En el artículo de instalación tienes más información sobre lo que es instalar de manera global
JSON mal formado
Este error es muy fácil de detectar. Si has formado mal tu JSON tendrás un error como:
"./composer.json" does not contain valid JSON
En el artículo de la instalación de Composer explicamos que uno de los problemas típicos, en Windowa es no estar usando la codificación UTF-8. Es necesario para que composer considere que el JSON esté bien formado.
Si estás con UTF-8 debe ser un error de sintaxis, unas comillas que te faltan, una coma o algo así. Si te vuelves loco para encontrar el fallo prueba a usar un Validador de JSON: http://jsonlint.com/
Memoria límite de PHP
Si tu composer.json declara muchas dependencias quizás tengas que aumentar la memoria de los procesos de PHP. El error que verás es parecido a este:
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 72 bytes) in phar:///usr/local/Cellar/composer/1.0.0-alpha8/libexec/composer.phar/src/Composer/DependencyResolver/RuleSetGenerator.php on line 123
Esto se soluciona asignando más memoria para el proceso de PHP y se indica en el php.ini, en la variable de configuración memory_limit.
memory_limit = 2048M
El valor de memory_limit admite números enteros, en cuyo caso estás especificando una cantidad de Bytes. Pero también te admite terminar con una unidad ("K", "M", "G") indicando el valor en Kb, Mega o Giga.
No te olvides de reiniciar PHP una vez has hecho cualquier configuración en el PHP.ini.
¿Cuál es mi php.ini cuando trabajo por línea de comandos?
Una pregunta típica, a fin de aumentar la memoria límite de tu PHP es ¿Qué archivo de configuración php.ini debo editar? Si estás trabajando con Composer lo harás con el comando "composer" en tu terminal de sistema operativo. En ese caso es posible que estés trabajando con un php.ini diferente de tu PHP cuando trabaja sobre Apache.
Para saber el php.ini de línea de comandos (PHP CLI) tienes que hacer simplemente este comando.
php -i
Eso te mostrará una cantidad enorme de datos, parecidos a los que obtienes con phpinfo(). Tienes que buscar entre toda esa salida el texto "php.ini" para encontrar la ruta del archivo de configuración que se esté utilizando. En algún lugar aparecerá un texto como este:
Loaded Configuration File => /usr/local/etc/php/7.4/php.ini
Aumentar el tiempo del proceso de composer
Cuando invocas el comando composer de manera predeterminada se asigna un tiempo de procesamiento que son 300 segundos. Este tiempo puede ser insuficiente en caso que los paquetes a descargar sean pesados o en conexiones a Internet lentas. Si te ocurre esto recibirás un error que entre otras cosas tendrá este texto.
[...] The process "git clone [...] exceeded the timeout of 300 seconds
En este caso puedes invocar al comando asignando un nuevo valor máximo en segundos para realizar las operaciones de actualización o instalación de las dependencias. Sería algo como:
COMPOSER_PROCESS_TIMEOUT=3600 composer install
En la propia documentación de Composer encontrarás una excelente guía de resolución de problemas (en inglés) en la que seguramente darás respuesta a muchas otras situaciones. Yo iré colocando en esta lista otros problemas que me vaya encontrando, de momento esto es todo! si tu problema no está en la lista mándanos la solución cuando la encuentres!
Además, en nuestra sección de FAQs vamos resolviendo también dudas sobre el trabajo con el gestor de dependencias de PHP, que puedes ver en la categría Composer.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...