Cómo sacarle partido a Composer

Uno de los problemas a los que nos enfrentamos cada vez que estamos desarrollando un proyecto es a las dependencias con el framework, librerías y demás. Composer es un gestor de dependencias que nos ayuda a manejar todas las librerías externas, sus actualizaciones, el autoloading. En resumen, con Composer nuestra vida es más sencilla, pero como se utiliza, ¿Cómo sacarle partido a Composer?


Configurando Composer

Para manejar las dependencias tenemos que utilizar un archivo llamado composer.json en el cual escribimos que librerías necesitamos, definimos el autoloading.

{
  "name": "jeslopcru/simply-slug",
  "description": "Simple implementation for convert a string into a slug",
  "minimum-stability": "dev",
  "license": "MIT",
  "authors": [
    {
      "name": "Jesús López",
      "homepage": "http://jesuslc.com"
    }
  ],
  "require": {
    "php": ">=5.3.3"
  },
  "require-dev": {
    "phpunit/phpunit": "~4.0",
    "fabpot/php-cs-fixer": "~2.0@dev"
  },
  "autoload": {
    "psr-4": {"jeslopcru\\SimplySlug\\": "src/"}
  },
  "autoload-dev": {
    "psr-4": {
      "jeslopcru\\SimplySlug\\Test\\": "tests"
    }
  },
  "extra": {
    "branch-alias": {
      "dev-master": "1.0-dev"
    }
  }
}

No debemos preocuparnos por el esquema ya que podemos generarlos interectivamente utilizando

$ composer init

De la misma manera la documentación de Composer es genial y siempre podemos validar utilizando

$ composer validate

Explicando composer.json

  • Los atributos name, description, type, author… sirven para que otros usuarios puedan encontrar la librería en packlist
  • require define las dependencias que necesitamos para que nuestra librería pueda utilizarse, desde la minima versión de PHP hasta librerías de 3º
  • require-dev son los paquetes y librerías necesarias para desarrollar, pero que no necesitan utilizarse en producción, (PHPUnit por ejemplo)
  • autoload define como se deben cargar las clases

Manos a la obra

Para empezar a utilizar composer solo tenemos que crear el fichero composer.json y ejecutar el comando

$ composer install

Con esto descargamos todas las librerías necesarias en la carpeta vendor y se creará un archivo vendor/autoload.php el que podremos utilizar para el autoload. Tambien se creará un archivo composer.loc que necesita composer para gestionar las versiones de las dependencias.

De la misma manera, si es necesario se creará una carpeta llamada vendor/bin donde están los ejecutables de las librerías de 3º, por ejemplo si utilizamos phpunit tendremos ahí el ejecutable.

¿Cómo utilizar repositorios privados?

Por defecto composer utiliza packalist, pero si el código que tenemos que utilizar está en un repositorio privado ¿que hacemos? Para ello solo tenemos que añadir el siguiente bloque al fichero composer.json, validarlo ($ composer validate) y actualizarlo ($ composer update)

    "require": {
        "vendor/my-private-repo": "dev-master"
    },
    "repositories": [
        {
            "type": "vcs",
            "url":  "git@bitbucket.org:vendor/my-private-repo.git"
        }
    ]

Composer buscará las dependencias en estos repositorios y como ultimo recurso utilizará Packlist. La documentación de esta parte es muy detallada y con muchas opciones, así que te recomiendo que le eches un vistazo.

Eventos con Composer

En el flujo de descarga e instalación de dependencias podemos definir una serie de triggers para algunos eventos. Por ejemplo que después de instalar los paquetes se ejecute phpunit o lo que nosotros queramos. Para ello tan solo tenemos que definir los eventos que necesitemos en el fichero composer.json

    "scripts": {
        "post-update-cmd": "MyVendor\\MyClass::postUpdate",
        "post-package-install": [
            "MyVendor\\MyClass::postPackageInstall"
        ],
        "post-install-cmd": [
            "MyVendor\\MyClass::warmCache",
            "phpunit -c app/"
        ],
        "post-create-project-cmd" : [
            "php -r \"copy('config/local-example.php', 'config/local.php');\""
        ]
    }

Aquí podemos encontrar la documentación. Además utilizando esto podemos ejecutar e instalar otros paquetes JS como npm o bower.

Trabajando con entornos de producción

Ya hemos visto que composer es una herramienta necesaria para desarrollar y gestionar nuestras dependencias, pero no es lo mismo estar en un entorno de desarrollo que en uno de producción, en desarrollo necesitamos phpunit, phpcs, que las nuevas clases carguen automáticamente, pero ninguna de estás cosas es necesaria en producción.

Para generar un proyecto de producción debemos ejecutar este comando:

$ composer install --no-dev --optimize-autoloader --prefer-dist --no-interaction

Así nos aseguramos de no cargar librerías , tendremos un autoload específico que solo actualiza las clases que necesitamos (–optimize-autoload) y además si hubiese un conflicto indicamos a composer que el lo resuelva, así nos será más facil desplegar en producción, ayq que no necesitaremos intervención manual.

Referencias

Anuncios

2 comentarios en “Cómo sacarle partido a Composer

Comenta la entrada

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s