Tutorial

Cómo instalar y utilizar Composer en Ubuntu 18.04

PHPUbuntu 18.04

Brennen Bearnes escribió una versión anterior de este tutorial.

Introducción

Composer es una herramienta popular de administración de dependencias para PHP, creada principalmente para facilitar la instalación y actualización de dependencias de proyectos. Comprueba los demás paquetes de los que depende un proyecto específico y los instala utilizando las versiones apropiadas según los requisitos del proyecto.

A través de este tutorial, instalará Composer y dará los primeros pasos con la herramienta en un sistema Ubuntu 18.04.

Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

Paso 1: Instalación de las dependencias

Antes de descargar e instalar Composer, debe asegurarse de que su servidor tenga instaladas todas las dependencias.

Primero, actualice la caché del administrador de paquetes ejecutando lo siguiente:

  • sudo apt update

A continuación, instalaremos las dependencias. Necesitaremos curl para descargar Composer y php-cli para instalarlo y ejecutarlo. El paquete php-mbstring es necesario para proporcionar funciones para una biblioteca que utilizaremos. Composer utiliza git para descargar las dependencias del proyecto y unzip para extraer paquetes comprimidos. Es posible instalar todo con el siguiente comando:

  • sudo apt install curl php-cli php-mbstring git unzip

Con los requisitos previos cumplidos, ya podemos instalar Composer.

Paso 2: Descarga e instalación de Composer

Composer ofrece un instalador escrito en PHP. Lo descargaremos, comprobaremos que no esté dañado y lo utilizaremos para instalar Composer.

Asegúrese de posicionarse en su directorio de inicio y recupere el instalador usando curl:

  • cd ~
  • curl -sS https://getcomposer.org/installer -o composer-setup.php

A continuación, verifique que el instalador coincida con el hash SHA-384 para el instalador más reciente encontrado en la página Composer Public Keys/Signatures. Copie el hash de esa página y almacénelo como variable de shell:

  • HASH=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061

Asegúrese de sustituir el hash más reciente por el valor resaltado.

Ahora, ejecute el siguiente script PHP para verificar que el script de instalación se ejecute de forma segura:

  • php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Verá el siguiente resultado:

Output
Installer verified

Si ve el mensaje Installer corrupt, tendrá que revisar nuevamente si utilizó el hash correcto y volver a descargar el script de instalación. Luego, ejecute el comando para verificar el instalador nuevamente. Una vez que cuente con un instalador verificado, podrá continuar.

Para instalar composer de manera global, utilice el siguiente comando que lo descargará e instalará en todo el sistema como un comando llamado composer, en /usr/local/bin:

  • sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Verá el siguiente resultado:

Output
All settings correct for using Composer Downloading... Composer (version 1.6.5) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer

Para comprobar su instalación, ejecute lo siguiente:

  • composer

Verá que en este resultado se muestran la versión y los argumentos de Composer.

Output
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.6.5 2018-05-04 11:44:59 Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --profile Display timing and memory usage information --no-plugins Whether to disable plugins. -d, --working-dir=WORKING-DIR If specified, use the given directory as working directory. -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug . . .

Esto comprueba que Composer se instaló con éxito y está disponible en todo su sistema.

Nota: Si prefiere tener ejecutables de Composer separados para cada proyecto que aloje en este servidor, puede instalarlos localmente para cada proyecto. Los usuarios de NPM estarán familiarizados con este enfoque. Este método también es útil cuando su usuario del sistema no tiene permisos para instalar software en todo el sistema.

Para ello, utilice el comando php composer-setup.php. Esto generará un archivo composer.phar en su directorio actual, que puede ejecutarse con el ./composer.phar command.

Ahora, veamos el uso de Composer para administrar dependencias.

Paso 3: Uso de Composer en un proyecto de PHP

Los proyectos de PHP a menudo dependen de bibliotecas externas y la administración de estas dependencias y sus versiones puede ser complicada. Composer soluciona esto haciendo un seguimiento de sus dependencias y facilitando a otros su instalación.

Para utilizar Composer en su proyecto, necesitará un archivo composer.json. El archivo composer.json indica a Composer las dependencias que debe descargar para su proyecto y las versiones de cada paquete cuya instalación está permitida. Esto es extremadamente importante para preservar la uniformidad de su proyecto y evitar la instalación de versiones inestables que podrían causar problemas de compatibilidad con versiones anteriores.

No necesita crear este archivo de forma manual; hay muchas probabilidades de cometer errores de sintaxis al hacerlo. Composer genera de forma automática el archivo composer.json cuando añade una dependencia a su proyecto usando el comando require. Puede añadir dependencias adicionales de la misma manera, sin la necesidad de editar manualmente este archivo.

Para usar Composer en la instalación de un paquete como dependencia en un proyecto, se deben seguir estos pasos:

  • Identifique el tipo de biblioteca que requiere la aplicación.
  • Busque una biblioteca de código abierto adecuada  en Packagist.org, el repositorio oficial de paquetes de Composer.
  • Elija el paquete que desea usar.
  • Ejecute composer require para incluir la dependencia en el archivo composer.json e instale el paquete.

Probemos esto con una aplicación de demostración.

El objetivo de esta aplicación es transformar una oración en una cadena compatible con un URL; un slug. Esto se utiliza comúnmente para convertir los títulos de páginas en rutas URL (como la parte final de la URL de este tutorial).

Comencemos creando un directorio para nuestro proyecto. Lo llamaremos slugify:

  • cd ~
  • mkdir slugify
  • cd slugify

Ahora será el momento de buscar en Packagist.org un paquete que puede servirnos para generar slugs. Si busca el término “slug” en Packagist, obtendrá un resultado similar a este:

Búsqueda en Packagist: easy-slug/easy-slug, muffin/slug, ddd/slug, zelenin/slug, webcastle/slug, anomaly/slug-field_type

Observará dos números en el lado derecho de cada paquete de la lista. El número de la parte superior representa la cantidad de veces que se instaló el paquete y el de la parte inferior la cantidad de veces que se destacó un paquete en GitHub. Puede reordenar los resultados de la búsqueda conforme a estos números (busque los dos íconos del lado derecho de la barra de búsqueda). En general, los paquetes con más instalaciones y más estrellas suelen ser más estables, ya que muchas personas los utilizan. También es importante revisar la descripción del paquete para asegurarse de que se adecue a lo que usted requiere.

Necesitamos un convertidor de string a slug simple. Conforme a los resultados de la búsqueda, el paquete cocur/slugify parece ser una buena opción al ofrecer una cantidad razonable de instalaciones y estrellas. (El paquete está un poco más abajo de lo que se muestra en la captura de pantalla de la página).

Los paquetes en Packagist tienen un nombre de proveedor y un nombre de paquete. Cada paquete tiene un identificador único (un espacio de nombres) en el mismo formato que GitHub utiliza para sus repositorios: vendor/package. La biblioteca que deseamos instalar utiliza el espacio de nombres cocur/slugif. Necesita el espacio de nombres para solicitar el paquete en su proyecto.

Ahora que conoce exactamente los paquetes que desea instalar, ejecute composer require para incluirlo como una dependencia y generar también el archivo composer.json para el proyecto:

  • composer require cocur/slugify

Verá este resultado mientras Composer descarga la dependencia:

Output
Using version ^3.1 for cocur/slugify ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing cocur/slugify (v3.1): Downloading (100%) Writing lock file Generating autoload files

Como se observa en el resultado, Composer automáticamente decidió la versión del paquete que utilizará. Si revisa el directorio de su proyecto, este contendrá dos nuevos archivos, composer.json y composer.lock, y un directorio vendor:

  • ls -l
Output
total 12 -rw-rw-r-- 1 sammy sammy 59 Jul 11 16:40 composer.json -rw-rw-r-- 1 sammy sammy 2934 Jul 11 16:40 composer.lock drwxrwxr-x 4 sammy sammy 4096 Jul 11 16:40 vendor

El archivo composer.lock se utiliza para almacenar información sobre las versiones de cada paquete que están instaladas y garantizar que se utilicen las mismas versiones si otra persona clona su proyecto e instala sus dependencias. En el directorio vendor se ubican las dependencias del proyecto. La carpeta vendor no requiere confirmación en el control de versión; solo debe incluir los archivos composer.json y composer.lock.

Al instalar un proyecto que ya contenga un archivo composer.json, ejecute composer install para poder descargar las dependencias del proyecto.

Veamos rápidamente las restricciones de versiones. Si verifica los contenidos de su archivo composer.json, verá algo parecido a lo siguiente:

  • cat composer.json
Output
{ "require": { "cocur/slugify": "^3.1" } } sam

Posiblemente observe el carácter especial ^ antes del número de versión en composer.json. Con el fin de proporcionar flexibilidad y a su vez mantener la estabilidad de su proyecto, Composer admite diferentes restricciones y formatos para definir la versión requerida del paquete. El operador del símbolo de intercalación (^) utilizado por el archivo de generación automática composer.json es el operador recomendado para una máxima interoperabilidad, seguido del control de versión semántico. En este caso, define la versión 3.1 como la versión de compatibilidad mínima y permite actualizaciones a cualquier versión futura inferior a la 4.0.

En general, no tendrá que alterar las restricciones de versión de su archivo composer.json. Sin embargo, en algunas situaciones posiblemente deba editar las restricciones manualmente; por ejemplo, cuando se lance una nueva versión importante de su biblioteca requerida y desee actualizarla, o cuando la biblioteca que desee utilizar no siga el control de versión semántico.

Aquí se muestran algunos ejemplos para que comprenda mejor el funcionamiento de las restricciones de versiones de Composer:

Restricción Significado Versiones de ejemplos permitidas
^1.0 >= 1.0 < 2.0 1.0, 1.2.3, 1.9.9
^1.1.0 >= 1.1.0 < 2.0 1.1.0, 1.5.6, 1.9.9
~1.0 >= 1.0 < 2.0.0 1.0, 1.4.1, 1.9.9
~1.0.0 >= 1.0.0 < 1.1 1.0.0, 1.0.4, 1.0.9
1.2.1 1.2.1 1.2.1
1.* >= 1.0 < 2.0 1.0.0, 1.4.5, 1.9.9
1.2. * >= 1.2 < 1.3 1.2.0, 1.2.3, 1.2.9

Para acceder a una perspectiva más detallada de las restricciones de versiones de Composer, consulte la documentación oficial.

A continuación, veamos la forma de cargar las dependencias automáticamente con Composer.

Paso 4: Inclusión del script de carga automática

Dado que PHP no carga automáticamente las clases, Composer proporciona un script de carga automática que puede incluir en su proyecto para acceder a la carga automática de forma gratuita. Esto facilita mucho el trabajo con sus dependencias.

Lo único que debe hacer es incluir el archivo vendor/autoload.php en sus scripts de PHP antes de cualquier instancia de clase. Composer genera este archivo de manera automática al añadir su primera dependencia.

Vamos a probarlo en nuestra aplicación. Cree el archivo test.php y ábralo en su editor de texto:

  • nano test.php

Añada el siguiente código que agrega el archivo vendor/autoload.php, carga la dependencia cocur/slugify y la utiliza para crear un slug:

test.php
<?php
require __DIR__ . '/vendor/autoload.php';

use Cocur\Slugify\Slugify;

$slugify = new Slugify();

echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');

Guarde el archivo y cierre el editor.

Ahora ejecute el script:

  • php test.php

El resultado de esto es hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it.

Las dependencias necesitan actualizaciones cuando se lanzan nuevas versiones. Veamos la forma de manejar eso.

Paso 5: Actualización de dependencias del proyecto

Cuando desee actualizar las dependencias de proyecto a versiones más recientes, ejecute el comando update:

  • composer update

Con esto, se buscarán versiones más recientes de las bibliotecas que necesitó en su proyecto. Si se encuentra una versión más reciente y es compatible con la restricción de versión definida en el archivo composer.json, Composer sustituirá la versión anterior instalada. El archivo composer.lock se actualizará para reflejar estos cambios.

También puede actualizar una o más bibliotecas determinadas especificándolas de la siguiente manera:

  • composer update vendor/package vendor2/package2

Después de actualizar sus dependencias, asegúrese de verificar sus archivos composer.json y composer.lock para que otros puedan instalar estas versiones más recientes.

Conclusión

Composer es una herramienta poderosa que todo desarrollador de PHP debe tener entre sus recursos. A través de este tutorial, instaló Composer y lo utilizó en un proyecto sencillo. De esta manera, sabrá instalar y actualizar dependencias.

Más allá de proporcionar una alternativa sencilla y segura para gestionar las dependencias de los proyectos, también establece una nueva norma de hecho para intercambiar y descubrir paquetes PHP creados por la comunidad.

Creative Commons License