30 de diciembre de 2018

Usando Composer en Mac OS

Composer al igual que npm de NodeJs o bundler en Ruby, es un gestionador o manejador de dependencias de paquetes o librerías, pero para el lenguaje PHP. Composer es el estandar defacto para la gestión de dependencias en el desarrollo en PHP moderno. En este artículo, veremos como usar Composer.

Composer instala los paquetes por defecto de manera local, o según los requerimiento de nuestro proyecto en PHP.

Pero... ¿De donde trae los paquetes Composer?

Composer busca los paquetes en su principal repositorio, llamado Packagist: http://packagist.org.

Populares librarias y framework gestionados por Composer

Usando Composer podremos instalar paquetes de PHP tales como:

  • phpExcel
  • Twitter Bootstrap
  • Laravel
  • PHING
  • kint (permite hacer un debug por pantalla)
  • PHPMailer
  • tinymce
  • phpMyAdmin
  • phpunit
  • Doctrine
  • Codeigniter
  • Symfony
  • HTML2PDF
  • Smarty
  • Parsedown http://parsedown.org

kint es una alternativa al debugging tipo: var_dump($variable);die(__FILE__.__LINE__); donde sólo necesitaremos escribir d($variable); e incluso producirá una salida con mejor formato.

Requerimientos para Instalar Composer

  • PHP 5.3.2 o superior.
  • Git para manejar la gestión de repositorios.

Instalar Composer en Mac OS X

Composer viene empaquetado como un archivo PHAR de PHP: composer.phar archivos que necesitan de PHP para su ejecución, es decir, se ejecutarán bajo la sintaxis php composer.phar.

Antes de instalar Composer es prudente comprobando si ya lo tenemos instalado. Esto se hace simplemente con el comando:

composer --version

Lo recomendado es hacer la instalación de Composer, de modo que funcione como si fuera un comando más dentro de nuestro equipo. En este caso, usaremos Homebrew de la manera fácil:

brew install composer

O usando:

brew install homebrew/php/composer

Si tenemos problemas con lo anterior, entonces usaremos:

brew upgrade
brew update
brew tap homebrew/dupes
brew tap homebrew/homebrew-php
brew install php70
brew install mcrypt php70-mcrypt
brew install composer

Así, lograremos tener disponible el comando de Composer.

En Microsoft Windows, Composer se descarga como un archivo ejecutable y su instalación es directa, simplemente ejecutando el archivo.

Cómo usar Composer

Para iniciar Composer en un proyecto, es similar a Git:

composer init

El comando anterior nos llevará paso por paso en el proceso de establecer el archivo de configuración de Composer, usado para nuestro proyecto PHP.

Este archivo de configuración generado con el comando composer init, controlará la forma de operar de Composer. Este archivo de configuración está en formato JSON con el nombre de composer.json, similar al Gemfile de Ruby o el package.json de NodeJS.

Podemos editar el archivo composer.json, como veremos más adelante, para instalar los paquetes según este archivo de configuración. Hacer la instalación con Composer es simplemente ejecutar el comando:

composer install

Generalmente, se instalarán en un directorio llamado vendor/.

Como ya hemos dicho, la lista de paquetes que maneja Composer la podemos ver en la web packagist.org.

Pero ¿Cómo modificamos el archivo de configuración de Composer?...

Modificando el archivo composer.json

Para trabajar con Composer debemos aprender a editar el archivo composer.json ya que es el que controla cuales paquetes instalar. La agregación de paquetes a nuestro proyecto van en la línea require del archivo:

 {
  /* algún código anterior */

  "require": {
   "smarty/smarty": "3.1.*"
  }
 }

En este caso, este archivo de configuración composer.json le dice a Composer que instale el paquete llamado smarty en cualquier versión de la 3.1 (eso nos indicar la expresión 3.1.*). Y si este paquete smarty requiere de otros paquetes, y estos últimos a su vez de otros en una dependecia en cascada, también Composer los instalará tomando cuidado de la versión que le hemos señalado.

Se pueden usar varias opciones para especificar versiones, por ejemplo: Empleando operadores lógicos para definir un rango ">=3.1.0" o ">=3.1.0, <4.0.0", una opción igual a la última sería "^3.1.0". También se pueden definir versiones del tipo "~3.1.0".

Composer también hace uso exclusivo de un archivo llamado composer.lock, donde controla el versionado de las dependencias y sub-dependencias según los paquetes establecidos en la instalación composer.json.

Así para traer la librería a nuestro proyecto, ejecutamos el comando:

composer install

Esto traerá la librería a la carpeta vendor/, creada por Composer junto con la creación de un nuevo archivo en formato JSON llamado composer.lock. Donde el archivo composer.lock fijará las versiones de los paquetes que hemos instalado y su vez de sus dependencias internas, para evitar conflictos posteriores.

Actualizar las versiones de los paquetes

Se advierte que se debe evitar usar el comando composer update sin especificar el paquete, pues en ese caso Composer intentará actualizar todos los paquetes de nuestro proyecto, lo cual será causa probable donde sucedan incompatibilidades. Por lo tanto, se recomienda usar el comando:

composer update nombre_paquete

Hacer que Composer elija la mejor versión del paquete

composer require nombre_paquete

Esto producirá que Composer busque la mejor versión del paquete que no rompa con nuestras dependencias actuales.

Composer implementa un Autoloader

El Autoloader que implementa Composer está adherido al estandar psr-4. Por ejemplo, podemos definir un namespace para nuestra aplicación:

{
 /* algún código anterior */

 "autoload": {
  "psr-4": {
   "MiDominio\\": "app/models/"
  }
 }
}

En este caso, el namespace es MiDominio (los namespaces se definen con \) que fijará la carpeta app/models/ como el lugar donde comenzar a buscar nuestras clases.

Cabe mencionar, que los paquetes cargados por Composer ya vienen con su funciones de Autoload.

Composer puede crear las funciones autoload de nuestro proyecto, definidas en el composer.json, usando cualquier de los siguientes comandos:

composer dump-autoload
composer dumpautoload
composer dump

Es decir, Composer nos evita el trabajo de crear las funciones de autoload para nuestro proyecto.

Crear esqueletos de proyectos

Composer también nos permite crear la estructura inicial (esqueleto) de un proyecto en Laravel, usando el comando:

composer create-project laravel/laravel miproyecto

O en el caso, que desearamos emplear el framework Codeigniter:

composer create-project codeigniter/framework

Tips

Algunos consejos a tener en cuenta, cuando se emplea Composer:

  • Asegurarse que al guardar el archivo composer.json se efectue con codificación UTF-8, sobre todo si estamos trabajando en Windows.

  • Evitar usar el comando composer update, ya que puede romper el código de nuestro proyecto.

Conclusión

Aunque hemos explorado superficiente la funcionalidad de Composer, pues este paquete dispone de un extenso conjunto de comandos, que se sugiere revisar en su web https://getcomposer.org.

Un flujo de trabajo simple con Composer, sin preocuparnos de versiones sería:

  • Ubicarnos en la carpeta de nuestro proyecto y ejecutar:
composer init
  • Luego determinar cuales son las librerías externas de PHP que necesitamos instalar en nuestro proyecto. Por ejemplo, si necesitamos la librería phpMailer y HTML2PDF, entonces vamos a la web de Packagist para encontrar los comandos de Composer para instalar dichos paquetes:
composer require phpmailer/phpmailer 
composer require spipu/html2pdf

La sintaxis precisa del comando lo vemos en la homepage Packagist correspondiente a phpMailer y HTML2PDF: https://packagist.org/packages/phpmailer/phpmailer.

Esto además de cargar los paquetes en el directorio vendor, nos modificará el archivo composer.json para expresar la dependencia requerida, y el archivo composer.lock donde se fijarán las versiones efectivamente cargadas de todos los paquetes. Todo esto de modo desatendido para el usuario.

    composer dump
  • Finalmente si deseamos compartir nuestro proyecto, solamente tendremos que usar los archivos JSON de Composer, sin preocuparnos de enviar estos paquetes externos pues Composer puede gestionarlos autonomamente.

No cabe duda que Composer es una tremenda herramienta que nos facilita notablemente el trabajar con librerías de PHP externas a nuestro proyecto.

Referencias

Homepage de Composer: https://getcomposer.org, https://getcomposer.org/doc/04-schema.md. Repositorio de Paquetes de Composer: https://packagist.org.

Cómo solucionar errores habituales de Composer: https://librosweb.es/tutorial/como-solucionar-los-errores-habituales-de-composer/.

Errores más comunes en Composer: https://es.stackoverflow.com/tags/composer/hot.

Instalar y actualizar paquetes con Composer: https://styde.net/instalar-y-actualizar-paquetes-con-composer/.

Referente de Laravel y Composer: https://styde.net/blog/.