Mostrando entradas con la etiqueta composer. Mostrar todas las entradas
Mostrando entradas con la etiqueta composer. Mostrar todas las entradas

viernes, 20 de junio de 2025

Disponibilizar un comando de terminal de un paquete instalado globalmente con Composer

Composer, el gestor de dependencias de PHP, nos ofrece la opción de instalar paquetes globalmente, para que puedan ser ejecutados como cualquier comando de shell, por ejemplo, ls, date, grep.

composer global require paquete

En Ubuntu 20, Composer instala estos paquetes en ~/.config/composer/vendor/bin.

Entonces, solo es cuestión de crear un enlace simbólico: ln -s ~/.config/composer/vendor/bin/laravel ~/.local/bin/. Si ejecutas ls -la .local/bin/ deberías ver un enlace simbólico para el comando laravel.

Opción dos: el problema con el primer enfoque es que necesitas crear un enlace simbólico para cada paquete global que instales. Así que, ¿por qué no olvidarnos de este rollo de ~/bin y ~/.local/bin y agregar la carpeta bin de Composer directamente a $PATH? Probablemente ya te diste cuenta, pero solo agrega esto a ~/.profile~/.bashrc o ~/.bash_profile:

if [ -d "/home/your-user/.config/composer/vendor/bin" ] ; then
    PATH="/home/your-user/.config/composer/vendor/bin:$PATH"
fi

Solo asegúrate de usar la ruta correcta de composer para tu sistema. El comando Laravel estará disponible en todo el sistema y puedes probarlo escribiendo "lara" y presionando TAB para autocompletar.


Fuente: https://www.reddit.com/r/laravel/comments/sykdco/after_installing_laravel_the_command_laravel_isnt/

domingo, 8 de junio de 2025

Cómo manejar en Eclipse PDT errores por dependencias PHP de Composer que son sugeridas pero no instaladas

¿Por qué un proyecto Laravel creado con composer create-project laravel/laravel depende del paquete ably-php pero no se descarga dicho paquete?


Esta pregunta apunta a una característica importante de cómo Composer maneja las dependencias: el concepto de suggest (sugerir) en composer.json.

Cuando creas un proyecto Laravel con composer create-project laravel/laravel, el paquete principal que se instala es laravel/framework, junto con algunas otras dependencias esenciales.

La razón por la que podrías ver que ably-php "depende" (o aparece mencionado) pero no se descarga es la siguiente:

  1. No es una dependencia require directa ni transitiva obligatoria:

    ably-php (el cliente PHP para el servicio de mensajería en tiempo real Ably) no es una dependencia obligatoria para que Laravel funcione. Tu aplicación Laravel no lo necesita para arrancar ni para realizar tareas básicas como routing, ORM, etc.

  2. Es una dependencia suggest (sugerida):

    El paquete laravel/framework (que es el núcleo de tu aplicación Laravel) tiene una sección en su composer.json llamada suggest. En esta sección, lista paquetes opcionales que podrías querer instalar si vas a usar ciertas funcionalidades de Laravel.

    Por ejemplo, Laravel soporta la funcionalidad de Broadcasting (transmisión de eventos en tiempo real). Para usar Broadcasting, Laravel necesita un driver, y Ably es uno de los drivers soportados.

    Entonces, en el composer.json de laravel/framework (o de algún componente relacionado con broadcasting), verás algo parecido a esto en la sección suggest:

    JSON
    {
        "name": "laravel/framework",
        "type": "library",
        // ... otras configuraciones
        "suggest": {
            "ably/ably-php": "Required to use the Ably broadcast driver.",
            "pusher/pusher-php-server": "Required to use the Pusher broadcast driver.",
            "php-amqplib/php-amqplib": "Required to use the RabbitMQ / AMQP queue driver.",
            // ... otras sugerencias
        },
        // ...
    }
    

¿Qué significa suggest en Composer?

  • Cuando un paquete sugiere otro, significa: "Este paquete (ej. laravel/framework) puede funcionar sin el paquete sugerido (ably-php), pero si quieres usar una funcionalidad específica (ej. Broadcasting con Ably), entonces necesitarás instalarlo aparte."
  • Composer no instala automáticamente los paquetes listados en suggest. Simplemente los muestra en la salida cuando ejecutas composer install o composer update (a veces con un mensaje como "Package X is suggested by Y for Z functionality"). Es una pista para el desarrollador.

¿Por qué elegir suggest en lugar de require?

Se usa suggest para:

  1. Mantener el tamaño del paquete base pequeño: No se fuerza a todos los usuarios de Laravel a descargar dependencias que no usarán si no implementan ciertas funcionalidades.
  2. Evitar dependencias innecesarias: Permite a los desarrolladores elegir solo lo que necesitan, reduciendo la "huella" de dependencias del proyecto.
  3. Flexibilidad: Laravel puede sugerir múltiples drivers o implementaciones para una misma funcionalidad (como varios drivers de broadcasting o de colas), sin obligar a instalar todos.

En resumen:

Un proyecto Laravel estándar "sugiere" ably-php porque laravel/framework tiene soporte para usar Ably como driver de broadcasting, pero no lo "requiere" directamente. Por lo tanto, Composer te informa de su existencia pero no lo descarga a menos que tú lo pidas explícitamente.

Si en algún momento decides usar Ably para las funcionalidades de tiempo real en tu aplicación Laravel, deberás instalarlo manualmente ejecutando:

Bash
composer require ably/ably-php

Solo entonces el paquete se descargará y se incluirá en tu vendor/ y en tu composer.lock.