Composer desde cero en un proyecto nuevo

En ocasiones tenemos que empezar a programar un proyecto PHP desde cero patatero. ¿Sabrías por dónde empezar? En esta fase temprana del desarrollo de apps web entra en juego Composer, el gestor de dependencias de PHP.

Composer desde cero en un proyecto nuevo

Con Composer te olvidas para siempre de instalar manualmente los componentes de terceros que necesitas, actualizarlos y gestionar las dependencias. Todo es automático, solo hay que configurar un archivo composer.json en la carpeta raíz de tu aplicación PHP y ya está. El resto es magia.

No te pierdas este tutorial, ¡aprende a instalar los paquetes que necesita tu nueva app con Composer!

A partir de este momento voy a suponer que ya lo has instalado en tu ordenador, ¿vale?, si todavía no lo has hecho descárgatelo ahora.

1, 2, y 3… Are you ready?

Vamos a empezar el tutorial creando la carpeta raíz de nuestra app nueva:

Nos metemos en la carpeta recién creada:

Y justo después ejecutamos el comando:

¡Bien! Composer nos da la bienvenida:

A continuación empieza a hacernos una serie de preguntas, pero esos datos no son importantes ahora; dale al intro todo el rato que es lo que hace todo el mundo en la fase de desarrollo.

Cuando llegues a esta pregunta:

Escribe n.

Y en esta otra:

Vuelve a escribir n.

Finalmente Composer te preguntará esto:

Dale a la tecla intro o escribe yes, como prefieras.

¡Ya está! Si todo va bien se creará un archivo composer.json vacío:

Para incluir nuevos componentes en tu aplicación solo tienes que escribir los paquetes correspondientes en la clave require. Veamos un ejemplo ahora mismo.

Buscando paquetes en Packagist

Packagist es el repositorio oficial de paquetes Composer. Así pues, cuando necesites añadir un nuevo componente en tu app…

  • Vete a packagist.org
  • Busca el paquete que necesites
  • Fíjate en la versión que te interesa
  • Finalmente, escribe el nombre del paquete y la versión en tu archivo composer.json

¡Eso es todo! Esa es la jugada.

Gestionar paquetes

Supongamos que nuestra app utiliza Httpful, ¿ok? Entonces buscamos Httpful en packagist. Nosotros instalaremos nategood/httpful, que es el paquete oficial creado por Nate Good (fíjate en el número de descargas, en las puntuaciones de los usuarios, el nombre del autor, etc.).

Figura 1. Buscamos Httpful en Packagist

Figura 1. Buscamos Httpful en Packagist

Una vez dentro de la descripción de Httpful nos fijamos en la versión que nos interesa, en nuestro ejemplo la más nueva de todas: 0.2.20.

Figura 2. Instalaremos la versión 0.2.20

Figura 2. Instalaremos la versión 0.2.20

Configurando dependencias en composer.json

Con el nombre del paquete y la versión en mano, incluimos la información en nuestro composer.json:

Y para instalarlo ejecutamos:

Obtenemos esta salida:

Todo ha ido bien, Composer ha instalado Httpful en la carpeta vendor de mi-proyecto.

El comando composer update

Nuestro ejemplo ha sido bastante sencillo, ¿cierto?, hemos especificado una versión exacta de Httpful, la 0.2.20, y ya está. Era lo más fácil para explicarte cómo funciona Composer.

Pero en la práctica, en lugar de especificar la versión determinada de los paquetes se emplean unos operadores especiales para hacer referencia a rangos de versiones de forma más flexible, por ejemplo el operador tilde ~, el operador caret ^ o el asterisco *.

Los operadores de versionado se engloban en tres categorías: restricciones básicas (basic constraints), próximo lanzamiento (next release) y estabilidad (stability). Clica aquí para saber más sobre los operadores que controlan las versiones.

El caso es que en lugar de:

También podríamos haber escrito la siguiente variante con el operador tilde ~:

Así indicamos que queremos instalar la versión más reciente de Httpful dentro del rango >=0.2.0 <1.0.0, esto es, la versión 0.2.20.

Los dos composer.json de arriba hacen aparentemente lo mismo pero no son equivalentes, ¿sabes por qué? Porque Composer también permite actualizar paquetes así:

En combinación con este comando, los operadores de versionado de Composer te liberan de andar especificando manualmente cada dos por tres las versiones más recientes de los paquetes. Es mucho más cómodo usar los operadores ^ y ~ que escribir la versión exacta de un paquete.

¿Qué es el archivo composer.lock?

Parece una pregunta muy sencilla pero tiene un poco de trampa, es de nivel avanzado; no es tan fácil de responder como parece. Intentaré hacerlo ahora.

Fíjate que al ejecutar por primera vez composer install o composer update se genera automáticamente composer.lock, un archivo que contiene las versiones exactas de los paquetes. La diferencia entre estos dos comandos está en cómo procesan composer.lock.

composer install

Cuando ejecutas composer install por primera vez, el comando lee el archivo composer.json, instala la versión más reciente de las dependencias y escribe el archivo composer.lock. Sin embargo, al ejecutarlo por segunda, tercera, o enésima vez, se instala lo especificado exactamente en composer.lock.

composer install nunca actualiza, solo instala nuevas dependencias.

composer update

Por otro lado, composer update siempre lee composer.json e instala la versión más reciente de las dependencias, actualizando el archivo composer.lock.

Lo siento Jordi, sigo sin verlo muy claro…

Ok, un poco de paciencia, ya te decía que en realidad la pregunta no es muy sencilla de responder.

La clave para comprender el por qué de este archivo la encontramos dentro de un contexto de trabajo en equipo. Ciertamente, el archivo composer.lock es muy importante si trabajas con Git porque permite hacer un seguimiento de las versiones exactas de las dependencias.

Imagina que haces un clone de un repo git y justo después ejecutas composer install, como se hace casi siempre. Pues bien, gracias al archivo composer.lock te instalarás exactamente las mismas versiones que tus compañeros de equipo.

Conclusión

Cuando creas una app PHP nueva puedes comenzar instalando los componentes que necesita y que han desarrollado otras personas. Para ello, crea un archivo composer.json con el comando composer init, indica los paquetes que quieres e instálalos con composer install.

Composer instalará el software desarrollado por terceros en la carpeta vendor, resolviendo por ti el tedioso problema actualizar a mano los paquetes y resolver las dependencias.

Packagist es el repositorio oficial de paquetes Composer, ve a packagist.org cuando necesites consultar el estado de un paquete, las versiones más recientes, sus dependencias, etc.

0 comentarios

¿Me dejas un comentario? ¡Gracias!

Deja un comentario

Los campos obligatorios están marcados con *