Cómo crear un paquete personalizado desde cero con Composer
¿Qué es Composer?
Composer es un manejador de dependencias de PHP. Se encarga de administrar las dependencias necesarias en cada proyecto, esto quiere decir que Composer actualizará las librerías y dependencias necesarias para administrarlas en un solo lugar.
Seguramente te estarás preguntando cómo esto puede traerte beneficios, bueno, imagina que estás trabajando en un proyecto, escribiendo un par de clases para manejar ciertas acciones. Tiempo después, empiezas un nuevo proyecto en el que necesitas esas antiguas características así que utilizas el tradicional copy-paste, para optimizar los tiempos. En este punto tendrás dos versiones con las mismas funcionalidades, así que copias la nueva versión y la reemplazas en el primer proyecto.
Supongamos que en vez de 2 proyectos tienes 20, es una locura pensar que un trabajo tan rudimentario como éste deba realizarse cada vez que el código sea modificado. Aquí es donde la idea de crear un paquete que abarque estas funcionalidades es la mejor opción, ya que puede ser manejado por versiones y utilizado de acuerdo a las características del proyecto, otorgando una mayor facilidad de soporte.
Crear un paquete composer significa que el código del repositorio y proyecto puede ser actualizado en simples pasos, y mucho más, la comunidad entera tiene acceso a ese código y puede ser usado en cientos de proyectos.
En este blog, veremos cómo crear un paquete personalizado usando composer para consumir el API de GitHub. Para crear el paquete personalizado de Composer, necesitarás crear un folder con la siguiente estructura:
|- vendor/name |- src |- Contracts |- Models |- Providers |- tests |- vendor
Después de crear la estructura base, en el tipo de terminal debe ir:
git init #initialize git tracking
composer init #this command will guide you through creating your composer.json file
Configuración del archivo composer.json
1. Establecer el nombre del paquete vendor/name
, en este caso: agusrdz/github-api
.
2. Añadir una descripción al paquete: This is a demo package to use the API of Github
.
3. Añadir un autor: Your name [email protected]
.
4. Añadir estabilidad mínima para el paquete: dev
.
5. Definir las dependencias (require) para la producción manual, en vez de interactiva.
6. Definir las dependencias (require-dev) para el desarrollo manual en vez de interactivo.
7. Confirmar la generación del archivo composer.json.
8. Confirmar si quieres que el directorio vendor
se añada al archivo .gitignore
.
9. Añadir cada dependencia necesaria para usar el paquete.
10. Después de escribir el archivo composer.json, iniciar composer install
en la terminal.
{ "name": "agusrdz/github-api", "description": "This is a demo package to use the API of Github.", "type": "package", "license": "MIT", "authors": [ { "name": "Agustin Espinoza", "email": "[email protected]" } ], "minimum-stability": "dev", "require": { "php": ">=5.6", "guzzlehttp/guzzle": "^6.1", "jenssegers/model": "^1.1" }, "require-dev": { "phpunit/phpunit": "~5.0", "phpunit/phpunit-mock-objects": "~3.0", "illuminate/support": "^5.3" } }
¡Eso es todo!
Bueno, esto es casi todo lo que se ocupa… básicamente este es el composer.json que se requiere para crear un paquete composer. Es necesario añadir más líneas para definir los parámetros como cargas automáticas, pruebas unitarias y estabilidad preferente; así que ve a composer.json
y añade esto después de required-dev
.
"require-dev": { "phpunit/phpunit": "~5.0", "phpunit/phpunit-mock-objects": "~3.0", "illuminate/support": "^5.3" }, "autoload": { "psr-4": { "AgusRdzGitHub": "src/" } }, "autoload-dev": { "classmap": [ "tests/TestCase.php" ] }
Después de esto, añade el archivo phpunit.xml
en la carpeta raíz para correr pruebas unitarias, las cuales son altamente recomendadas de hacer durante el desarrollo de estos paquetes.
<?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals="false" backupStaticAttributes="false" bootstrap="vendor/autoload.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" syntaxCheck="false"> <testsuites> <testsuite name="Your package's test suit"> <directory>./tests/</directory> </testsuite> </testsuites> </phpunit>
Este paquete no está en la lista de Packagist.org
porque fue creado con el único propósito de ser demostrativo. Para probarlo en tu proyecto, necesitas añadir eso en tu composer.json.
"require": { ..., ..., "agusrdz/github-api": "dev-master" }, "repositories": [ { "type": "vcs", "url": "https://github.com/AgusRdz/agusrdz-github-api.git" } ],
Conclusión
Como puedes ver, crear paquetes con Composer es muy sencillo. En este ejemplo algunas de las funcionalidades proveídas por GitHub API son consumidas. Lo mejor de todo es que pueden ser usadas por cualquier proyecto que administre sus dependencias con Composer.
Si deseas ver resultados, puedes visitar este repositorio para revisar cómo es consumida la API, o este otro para ver si es completamente funcional. Por ejemplo, Packagist no es necesario porque se enfoca en repositorios compartidos, pero si quieres publicar tus paquetes para el uso de toda la comunidad de desarrolladores.. puedes hacerlo siguiendo el mismo proceso.
En ClickIT nos encargamos de crear soluciones inteligentes para asegurar la agilidad de los sitios y la reducción de tiempos muertos en el desarrollo de aplicaciones a través de paquetes como este.