Saturday, May 3, 2014

Composer - Introducción, Proyecto y Librería


Composer
Proyecto con dependencias
    Estructura
    Video del proceso
    Pasos explicados
    Resultado explicado
Librería
    Estructura




Composer

Composer es un Gestor de Dependencias para PHP.

La idea del gestor de dependencias es que el mismo proyecto declara las librerías que necesita para poder trabajar y delega el trabajo relacionado con estas al gestor de dependencias.

Hay multitud de gestores de Dependencia
Maven, Gradle, npm, Pip, Bundler

Hasta la llegada de Composer creo que no había ninguno para PHP. En cierta manera los últimos años el mundo PHP se ha profesionalizado a niveles agigantados. Ha sido una combinación  de varias cosas. Las llegada de los frameworks(CakePHP, Symfony, Laravel) , el propio lenguaje ha evolucionado aprendiendo de sus hermanos Namespaces, Traits, etc. Aún así el lenguaje es bastante versátil así que no basta y para ello también han surgido los PSR (PHP Standard Recommendations).

¿Para que sirve todo esto?
Básicamente el resumen sería decir que Composer ha venido para agregar una nueva capa que hay que aprender pero que a corto/medio/largo plazo nos va a quitar muchos dolores de cabeza del desarrollador de PHP. El objetivo es que el desarrollador pueda centrarse en el problema sobre el que desea trabajar y no lidiar con problemas externos.


Proyecto con dependencias

Para entender el concepto he creado un repositorio en Github que no tiene otro objetivo que mostrar cómo funciona este gestor de dependencias.

https://github.com/raultm/project


Estructura

He intentando dejarlo lo más liviano posible para que quede el objetivo quede meridianamente claro.
En este caso el proyecto cuenta con tres archivos

composer.json
Donde indico una dependencia de una librería creada para el mismo objetivo, demostrar lo mínimo indispensable para crear una dependencia de Composer.

index.php
Un archivo en php que hace uso de la dependencia añadida en el composer.json

.gitignore
Composer descarga y añade las dependencias en una carpeta concreta “vendors” dentro de nuestro proyecto y debido a que composer se encarga de gestionar gestionar todo esto no nos interesa añadir esta carpeta en el historial de nuestro repositorio.


Video del proceso




Pasos explicados

Para este ejemplo tenemos unos requisitos sencillos
  • Tener un servidor local
  • Tener Git instalado
Clonamos el proyecto en la carpeta de los docs de nuestro servidor.
~git clone https://github.com/raultm/project.git

Nos situamos en la carpeta donde se descarga el clone
~cd project

(Opcional) En caso de no tener Composer instalado en el sistema se puede descargar sobre el proyecto.
~curl -sS https://getcomposer.org/installer | php

En caso de seguir esta opción a partir de aquí modificar los comandos que usan ‘composer’ por ‘php composer.phar’. Ejemplo ‘composer install’ por ‘php composer.phar install’

Le pedimos a Composer que se encargue de instalar las dependencias
~composer install


Resultado explicado

Tras las líneas anteriores podemos ver el proyecto funcionando accediendo al navegador en la carpeta concreta. El Proyecto muestra la siguiente línea.
Author :: raultm

Composer ha creado un archivo composer.lock ¿Para qué? Este fichero lo que hace es definir las versiones concretas de las dependencias descargadas. Gracias a este fichero todos los integrantes del equipo compartirán exactamente las mismas librerías en el proyecto y no habrá incompatibilidades por estar parte.

Vale, eso está muy bien pero ¿qué pasa si aparece una nueva versión de una de las dependencias? Pues simplemente debes decir a Composer que se actualice
~composer update

Aparte podemos ver el interior de la carpeta ‘vendors’ donde podemos revisar tanto la estructura montada por composer para el autocargado de las dependencias como las propias dependencias.


Librería

Aparte de saber como montar un proyecto me parece interesante aprender lo mínimo indispensable para crear un módulo propio que podamos reusar en nuestros proyectos gracias a las bondades de Composer.

Podemos comprobar  la librería en


Estructura

En este caso tenemos un librería con dos archivos y dos carpetas.

composer.json
La configuración mínima del proyecto en este caso es un nombre para la librería y un marcado para decirle a Composer que el autocargado de nuestra librería es PSR0.
Este archivo será leído por Composer cuando esta librería sea solicitada como dependencia por un proyecto concreto.

phpunit.xml.dist
La configuración concreta para ejecutar los test

src
Carpeta con el código fuente de nuestra librería

test
Carpeta donde se recogen los tests desarrollados para comprobar la funcionalidad de nuestra librería.



Teniendo estas herramientas a nuestra disposición al menos conocerlas para saber si nos interesan utilizarlas o no.

No comments:

Post a Comment