Rimorsoft Online
Blog Foro

Introducción a Composer


Composer gestiona y administra los paquetes para cualquier proyecto PHP. La idea es, no seguir buscando en Google por ejemplo "paquetes para enviar email en PHP", sino dar un salto profesional y empezar a usar Composer para instalar y actualizar los paquetes necesarios para la creación de nuestros sistemas. Laravel, Symfony y muchos otros Framework profesionales usan Composer, no nos quedemos atrás, entendamos cómo funciona y cómo implementar está tecnología.

Aquí en Rimorsoft Online enseñamos Laravel y PHP... Y para hacer las cosas bien como instituto, y seguir buenas prácticas debo darte a conocer de mejor manera a Composer. Composer resuelve el problema de tener que ir a buscar a Google las librerías para nuestros proyectos. En el pasado escribiamos en Google algo así "cómo generar PDF en PHP", nos aparecía el listado estándar y comenzabamos a descargar, descomprimir y probar hasta que alguno funcione. Ahora tenemos a Packagist que es el repositorio principal de Composer.

Recuerda: En Composer escribimos los comandos y él busca en Packagist para su respectiva descarga, puedes ir y probar, ve a https://packagist.org/ escribe PDF y verás la lista de paquetes que puedes descargar y usar, además verás los comandos que debes usar y la documentación necesaria.

Composer es un increíble manejador de paquetes, dependencias... Es realmente increible, este sistema descarga el paquete y si este tiene dependencia entonces también las descarga. Ejemplo: Si vamos a instalar el paquete dompdf/dompdf usamos el comando composer require dompdf/dompdf y ya.. Sin embargo, composer detecta que tiene dependencias y las instala sin mayor trauma, problema y horas extra de trabajo.

Para instalar composer debes ir a la página oficial https://getcomposer.org/ y seguir sus indicaciones dependiendo del sistema operativo que estés usando.

Ten en cuenta que composer es una herramienta para la instalación y administración de dependencias en PHP (nada de Java, Python, C#, JavaScript, etc). Esta herramienta funciona porque hay un archivo en tu proyecto llamado composer.json donde declaras las librerias o paquetes de las que depende tu proyecto y las administrará es decir, las instalará o actualizará con éxito.

Gestión de dependencia

Cuando instalas o actualizas, Composer usa por lo general un directorio llamado vendor dentro de tu proyecto (revisa un proyecto de laravel para que observes dicha carpeta). Por defecto no instala nada globalmente, todo lo instala en tu proyecto web. Composer no es una idea nueva, está fuertemente inspirada en npm de https://nodejs.org/es/ y otras tecnologías parecidas.

De hecho me has visto usar npm y composer en varios videos del canal :)

Digamos que (para cerrar la idea) tenemos un proyecto que depende de varias librerias o paquetes y, varias de esas librerias dependen de otras. Composer detecta y descubre lo que necesitamos y los instala (lo que significa que los descarga en tu proyecto y los guarda sin mayor problema en la famosa carpeta vendor).

Ejemplo del archivo composer.json

{
    "name": "proveedor/paquete",
    "type": "library",
    "description": "Ejemplo de una descripción",
    "license": "MIT",
    "authors": [
        {
            "name": "Italo Morales F",
            "email": "[email protected]"
        }
    ],
    "require": {
        "barryvdh/laravel-dompdf": "0.8.*",
    }
}

En el archivo de ejemplo vemos que nuestro proyecto requiere de la instalación del paquete llamado barryvdh/laravel-dompdf, que se instalará una vez ejecutemos el comando composer install.

Conceptos para entender Composer

En youtube y Slack me han preguntado mucho sobre permisos de usuarios, manejar grupos, hacer sistemas real time, laravel y socket, etc... y esto está bien, pero además quiero enseñarte temas como este para que salgas mas temprano que tarde de la zona de PROGRAMADOR ENTUSIASTA (Junior). Así que lee y aprecia estos temas por muy teoríco que parezcan. En este post hablaremos sobre conceptos detrás de Composer. Realmente que es ¿es un software? ¿qué hace en realidad? y más...

Hablando de Composer ¿has tenido experiencia creando aplicaciones PHP desde cero? o ¿solo lo has usado Composer para instalar Laravel y paquetes?. No importa si solo has trajado con Composer gracias a Laravel, la idea es sincerarnos y así ayudarte mucho a entender bien sobre este mundo.

Cuando creamos un sistema en PHP no queremos reinventar la rueda, muchos problemas ya han sido resueltos como por ejemplo: enviar email, guardar en una base de datos, etc. Ahí es donde Composer es realmente valioso. Al escribir aplicaciones PHP desde "cero", en realidad no empezamos desde cero (y es la idea)... El éxito es gastar nuestro tiempo en el sistema en sí y no en solucionar "cómo enviamos un email" o "cómo guardamos en la base de datos".

Puede sorprenderte el hecho de que no hayas comenzado a programar y ya tengas millones de piezas de código utilizable. ¡Gracias a Composer no tenemos días tristes!. Dicho esto, comencemos con los conceptos.

Gestión de Dependencia

Imaginemos: Podrías descargar y agregar al proyecto los paquetes de forma manual, es decir, creamos la carpeta, pegamos el paquete (todo dentro de vendor/), cargamos las clases, inicializamos variables, y quizás muchas mas cosas hasta que por fin el sistema funcione. Pero, dentro de un año más o menos hay que actualizar y al hacerlo nuevamente manual nuestro sistema explotará, lo creas o no...

Hay cosas peores, preguntarnos ¿cuál dependencia es la que está fallando? ¿cuál actualizo? AUXILIOOOO... En realidad es muy díficil resolver todo esto y no queremos lidiar con todos estos problemas. Aquí es donde llega el Composer transformado en Super Saiyajin Blue y listo para entrar con la Doctrina egoísta para ayudarnos y así poder seguir adelante amando esta profesión... Composer se ocupa de esto y maneja todas las dependencias por nosotros, los instala, actualiza, inicializa y todo tomando en cuenta las versiones actuales y las soportadas.

Clase de carga automática - Autoloading

Composer registra automáticamente las clases para posteriormente usar. Tener que incluir cada clase antes de que podamos utilizarla es engorroso, repetitivo y ensucia nuestro código con un montón de innecesarias instrucciones include, require y require_once.

Esto es Autoloading ¿No es genial?

Colaboración en equipo

Una razón más para usar Composer es el trabajo en equipo.

Contamos con un archivo que define todos los paquetes junto a su versión. Es decir, detalla paquete a paquete y las versiones exactas, estamos hablando de composer.json. Esto significa que con una instalación rápida se ejecuta la versión exacta de todas las dependencias a cualquier miembro del equipo.

No más casos de este tipo

  • "Amigo, ¿qué necesito para ejecutar el sistema?".
  • o "tal vez necesito para actualizar mis paquetes".
  • o la peor "en mi computador si funciona".

Composer se encargará de esto por ti.

Paquetes

Composer = Paquetes. Los paquetes son pequeños directorios de código que han sido creados para servir o solucionar un problema en particular. Los paquetes de Composer están limitados solo por la creatividad del autor y hay diferentes tipos de paquetes, veamos:

Paquetes de aplicaciones

Podrías argumentar que esto no debería llamarse paquete. Sin embargo podemos decir que son proyectos impulsados por Composer. Los paquetes de aplicaciones contienen un composer.json solo para listar otros paquetes como dependencias o aprovechar la gran capacidad de carga automática de clases de Composer (Autoloading).

Estos paquetes no están destinados a ser redistribuibles. Es tu proyecto, es tu bebé y puede ser la base de código confidencial, o algo experimental, pero no es para compartir.

Este tipo de paquetes podría ser Laravel, Symfony, Spark, etc (aunque se distribuyen). Un ejemplo mas claro sería el proyecto Rimorsoft Online, es un paquete de aplicación que usa a su vez muchos otros paquetes.

Por otro lado, no te preocupes por la implementación, solo debes saber que estos paquetes contienen código y las clases que deseamos utilizar. Sé feliz, Composer descarga y carga de forma automática todo por y para nosotros.

Paquetes de dependencia

Este es el tipo por defecto y es simplemente copia del paquete en el directorio vendor/ (instalación básica de un paquete). Una dependencia o paquete son los 'redistribuibles' como el paquete para generar pdf.

Énfasis: No es nuestro proyecto web. Son librerias o componentes distribuible y reutilizables. De hecho el formato de un paquete de aplicación y de un paquete de dependencia no es muy diferente, incluso es casi idéntico. Se puede decir que un paquete de dependencia es un kit de desarrollo para resolver un problema y proporciona una funcionalidad específica, y un paquete de aplicación es un sistema completo (un proyecto web completo).

En otras palabras, un paquete de dependencia es un directorio de código para redistribuir que está destinado a hacer mas fácil la vida de otros programadores.

Por favor no te preocupes, es un proceso bastante simple y la experiencia te ayudará a manejar estos conceptos.

Libro de TDD - Lo que debes saber
Compra el libro
TDD lo que debes saber

Newsletter

Únete a más de 4.000+ personas y no te pierdas nunca más de las nuevas clases, tips, tutoriales y más cada semana.

    No enviamos spam. Puedes darte de baja en cualquier momento.