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.
3 comentarios en “Cómo sacarle partido a Composer”