SlideShare una empresa de Scribd logo
1 de 106
Descargar para leer sin conexión
C!"p#$r 
Gestionando dependencias en PHP 
Javier Núñez 
@javiernuber 
Septiembre 2014
I%&r!'())*+%
D$p$%'$%)*,- 
Casi cualquier código que escribimos termina dependiendo de librerías 
de terceros (para que vamos a reinventar la rueda) 
APP
D$p$%'$%)*,- 
Según van aumentando las dependencias se complica su gestión. 
APP
¿Q(. $- C!"p#$r? 
“Composer es una herramienta para la gestión de dependencias en 
aplicaciones PHP que permite definir las librerías de las que depende 
nuestro proyecto y se encarga de instalarlas de forma automática.”
¿Q(. $- C!"p#$r? 
“Composer es una herramienta para la gestión de dependencias en 
aplicaciones PHP que permite definir las librerías de las que depende 
nuestro proyecto y se encarga de instalarlas de forma automática.” 
• 1ª released el 1 de Marzo de 2012
¿Q(. $- C!"p#$r? 
“Composer es una herramienta para la gestión de dependencias en 
aplicaciones PHP que permite definir las librerías de las que depende 
nuestro proyecto y se encarga de instalarlas de forma automática.” 
• 1ª released el 1 de Marzo de 2012 
• Se inspira en NPM o Bundler
¿Q(. $- C!"p#$r? 
“Composer es una herramienta para la gestión de dependencias en 
aplicaciones PHP que permite definir las librerías de las que depende 
nuestro proyecto y se encarga de instalarlas de forma automática.” 
• 1ª released el 1 de Marzo de 2012 
• Se inspira en NPM o Bundler 
• 100% PHP
¿Q(. $- C!"p#$r? 
“Composer es una herramienta para la gestión de dependencias en 
aplicaciones PHP que permite definir las librerías de las que depende 
nuestro proyecto y se encarga de instalarlas de forma automática.” 
• 1ª released el 1 de Marzo de 2012 
• Se inspira en NPM o Bundler 
• 100% PHP 
• Utiliza componentes de Symfony :)
¿Q(. $- C!"p#$r? 
“Composer es una herramienta para la gestión de dependencias en 
aplicaciones PHP que permite definir las librerías de las que depende 
nuestro proyecto y se encarga de instalarlas de forma automática.” 
• 1ª released el 1 de Marzo de 2012 
• Se inspira en NPM o Bundler 
• 100% PHP 
• Utiliza componentes de Symfony :) 
• Permite autocargar nuestros paquetes
¿Q(. $- C!"p#$r? 
“Composer es una herramienta para la gestión de dependencias en 
aplicaciones PHP que permite definir las librerías de las que depende 
nuestro proyecto y se encarga de instalarlas de forma automática.” 
• 1ª released el 1 de Marzo de 2012 
• Se inspira en NPM o Bundler 
• 100% PHP 
• Utiliza componentes de Symfony :) 
• Permite autocargar nuestros paquetes 
• Muy simple de instalar y utilizar
¿Q(. !)(rr$ )!% PEAR? 
PEAR fue y sigue siendo una opción viable, sin embargo, ha sido 
abandonada por muchos desarrolladores de PHP en los últimos años. 
Algunas razones: 
• Trabaja a nivel global de sistema 
• Una versión por paquete y máquina 
• Sólo dist, no source 
• No permite diferentes orígenes 
• Dificultad para aportar nuevo paquetes 
• Gran número de paquetes desactualizados
I%-&,/,)*+%
Instalación local: 
I%-&,/,r C!"p#$r 
$ curl -sS https://getcomposer.org/installer | php 
Instalación global: 
$ curl -sS https://getcomposer.org/installer | php 
$ sudo mv composer.phar /usr/local/bin/composer 
$ sudo chmod +x /usr/local/bin/composer 
Composer require PHP 5.3.2+
I%-&,/,r C!"p#$r 
Listado de comandos 
$ composer list 
El comando help muestra información sobre un comando 
$ composer help install
A)&(,/0,r C!"p#$r 
Instalación local: 
$ php composer.phar self-update 
Instalación global: 
$ sudo composer self-update
U-,%'! C!"p#$r 
$% &( pr!1$)&!
D$2%*$%'! '$p$%'$%)*,- 
Las dependencias se definen en un archivo llamado composer.json 
Este fichero tiene que estar situado en la carpeta raíz del proyecto 
$ cd ~/proyecto 
$ vim composer.json
D$2%*$%'! '$p$%'$%)*,- 
Las dependencias se definen en un archivo llamado composer.json 
Este fichero tiene que estar situado en la carpeta raíz del proyecto 
$ cd ~/proyecto 
$ vim composer.json 
Nombre del paquete 
‘creador’/’proyecto’
D$2%*$%'! '$p$%'$%)*,- 
Las dependencias se definen en un archivo llamado composer.json 
Este fichero tiene que estar situado en la carpeta raíz del proyecto 
$ cd ~/proyecto 
$ vim composer.json 
Nombre del paquete 
‘creador’/’proyecto’ 
Versión
D$2%*$%'! '$p$%'$%)*,- 
También es posible generar las dependencias de forma interactiva. 
$ composer init 
Al ejecutar el comando init, tendrás que contestar varias preguntas 
cuyos valores se emplean para rellenar las opciones del archivo 
composer.json 
$ composer require silex/silex “~1.2” 
Añade nuevas dependencias en el archivo composer.json y además 
instala o actualiza las dependencias
V$r-*!%$- '$ p,q($&$- 
1.2.3 : Versión específica, indica exactamente una versión. 
>=1.0,<2.0 : Rango de versiones, operadores (>, >=, <, <=, !=) 
1.0.* : Comodines, indican la versión requerida con un comodín (*) 
~1.2 : Siguiente versión significativa, es equivalente a >=1.2,<2.0
I%-&,/,%'! '$p$%'$%)*,- 
$ composer install
I%-&,/,%'! '$p$%'$%)*,- 
Nuestra dependencia
I%-&,/,%'! '$p$%'$%)*,- 
Dependencias de 
nuestra dependencia 
Nuestra dependencia
I%-&,/,%'! '$p$%'$%)*,- 
Dependencias de 
nuestra dependencia 
Nuestra dependencia 
Sugerencias
E-&r()&(r, '$ '*r$)&!r*#
E-&r()&(r, '$ '*r$)&!r*# 
Definición de dependencias
E-&r()&(r, '$ '*r$)&!r*# 
Fichero con versiones exactas instaladas
E-&r()&(r, '$ '*r$)&!r*# 
Carpeta donde se descargan las dependencias
E-&r()&(r, '$ '*r$)&!r*# 
Fichero de autocarga
E-&r()&(r, '$ '*r$)&!r*# 
Carpeta propia de composer para su gestión 
interna
E-&r()&(r, '$ '*r$)&!r*# 
Carpetas de paquetes descargados
C!"p#$r./!)3 
Después de instalar las dependencias, composer crea un archivo con 
las versiones exactas que ha instalado de cada librería. 
$ composer install 
Usará composer.lock, si no existe utilizará 
composer.json y generará a composer.lock 
$ composer update Usará composer.json y actualizará 
composer.lock 
Versiona composer.lock en tu repositorio de código. Cualquier 
persona involucrada en el proyecto trabajará con las mismas 
versiones.
A(&!/!,'*%4
A(&!/!,'*%4
R$p#*&!r*#
5p! '$ r$p#*&!r*! C!"p#$r 
Packagist 
• Por defecto es el único que está disponible 
• Es el repositorio central de Composer 
• Actúa de proxy entre repositorios VCS y usuarios Composer 
• Lugar donde encontrar librerías para tu proyecto 
• Es de software libre, por lo que lo puedes instalar en tu servidor 
Es posible desactivar este repositorio:
5p! '$ r$p#*&!r*! C!"p#$r 
Satis 
Es una versión ultra-ligera y ultra-simplificada de Packagist. Ideal para 
proyectos privados, es muy fácil de usar.
5p! '$ r$p#*&!r*! VCS (4*&, -v% …)
5p! '$ r$p#*&!r*! PEAR
5p! '$ r$p#*&!r*! P,)3,4$
C!"! )r$,r (% 
p,q($&$ *%-&,/,b/$
C!"! )r$,r (% p,q($&$ *%-&,/,b/$ 
1. Creamos un fichero composer.json con la configuración 
del paquete 
2. Subimos el código a un repositorio, por ejemplo github 
3. Nos creamos una cuenta en Packagist.org y registramos 
nuestra librería diciéndole donde está el repositorio del 
código. 
4. ¡Ya podemos utilizar el paquete en nuestros proyectos!
)!"p#$r.6-!%
)!"p#$r.6-!% 
Nombre del paquete (creador/proyecto) 
Es obligatorio, para publicar un paquete
)!"p#$r.6-!% 
Indica el tipo de paquete, que por defecto 
se establece a library. 
Soporta por defecto 4 tipos: 
• library 
• project 
• metapackage 
• composer-installer
)!"p#$r.6-!% 
Se emplea para definir brevemente el 
propósito del paquete
)!"p#$r.6-!% 
Se trata de un array de palabras clave o 
etiquetas
)!"p#$r.6-!% 
Establece la URL del sitio web oficial del 
paquete
)!"p#$r.6-!% 
Indica la licencia bajo la que se publica 
el paquete
)!"p#$r.6-!% 
Indica el autor o autores del paquete
)!"p#$r.6-!% 
Para definir las dependencias del 
paquete que obligatoriamente de deben 
instalar
)!"p#$r.6-!% 
Esta propiedad permite configurar la 
carga automática de clases
PHP-FIG 
PHP-FIG: PHP Framework Interop Group 
Es un grupo desarrolladores y representantes de la comunidad PHP, que se 
han unido con el ánimo de unificar el ecosistema de frameworks, librerías, 
componentes y aplicaciones desarrolladas en PHP. 
PSR es la sigla de PHP Standards Recommendation 
• PSR-0: Autoloading Stándard 
• PSR-1: Basic Coding Standard 
• PSR-2: Coding Style Guide 
• PSR-3: Logger Interface 
• PSR-4: Improved Autoloading 
http://www.php-fig.org
5p# '$ A(&!/!,'*%4
5p# '$ A(&!/!,'*%4 
Autoload PSR-0 
Por ejemplo PHPCaceresMylibraryClass.php se ubicaría en: 
vendor/nombre_paquete/src/PhpCaceres/Library/Class.php 
Algunos paquetes necesitan la propiedad 
"target-dir": "Symfony/Component/Yaml"
5p# '$ A(&!/!,'*%4 
Autoload PSR-4 (tipo recomendado) 
Por ejemplo PHPCaceresMylibraryClass.php se ubicaría en: 
vendor/nombre_paquete/Class.php
5p# '$ A(&!/!,'*%4 
Esta definición PSR-0 
{ 
"autoload": { 
"psr-0": { 
"FooBar": "src/” 
} 
} 
} 
Equivale a esta definición PSR-4 
{ 
"autoload": { 
"psr-4": { 
"FooBar": "src/Foo/Bar/” 
} 
} 
}
5p# '$ A(&!/!,'*%4 
Otras librerías
5p# '$ A(&!/!,'*%4 
Helpers y funciones
Op&*"0,%'! /, ,(&!),r4, 
Es posible mejorar el rendimiento de la aplicación 
convirtiendo la carga automática de clases de PSR-0 y 
PSR-4 en un mapa de clases. 
$ composer dump-autoload -o 
También puedes hacerlo con los comandos install y update 
$ composer install -o 
$ composer update -o
V$r-*+% '$/ P,q($&$ 
Semantic versioning (http://semver.org) 
Formato X.Y.Z
V$r-*+% '$/ P,q($&$ 
Semantic versioning (http://semver.org) 
Patch, solo arreglos o bug 
Formato X.Y.Z
V$r-*+% '$/ P,q($&$ 
Semantic versioning (http://semver.org) 
Patch, solo arreglos o bug 
Formato X.Y.Z 
Minor, nueva funcionalidad 
compatible con la versión 
anterior
V$r-*+% '$/ P,q($&$ 
Semantic versioning (http://semver.org) 
Patch, solo arreglos o bug 
Formato X.Y.Z 
Minor, nueva funcionalidad 
compatible con la versión 
anterior 
Major, cambio no compatible 
con la versión anterior
V$r-*+% '$/ P,q($&$ 
Podemos indicar la versión de forma explicita 
{ 
"version": "1.0.0" 
}
V$r-*+% '$/ P,q($&$ 
Si tenemos nuestro proyecto en SVN, la versión se 
obtiene automáticamente analizando sus Tags y Ramas 
Basado en Tags 
• 1.0.0 
• v1.0.0 
Basado en Ramas 
• 1.10.5-RC1 
• v5.6.10beta2 
• v2.2.2-alpha 
• v2.0.3-p1 
Si el nombre de la rama se parece a una versión, el nombre de la 
versión será {nombre_de_rama}-dev si no dev-{nombre_de_rama}. 
• 2.0.x-dev 
• dev-master 
• 2.0.0.x-dev 
• dev-bugfix
L, pr!p*$',' "*%*"("--&,b*/*&1 
El valor por defecto es stable 
Los valores disponibles para esta opción por orden 
ascendente: dev, alpha, beta, RC y stable 
{ 
"minimum-stability": "stable" 
} 
Definir una dependencia para que pueda instalarse si 
tiene estabilidad inferior. 
"dmd/dms": "1.0.0@dev"
D$2%*$%'! $/ ,/*,- '$ (%, r,", 
Ya puedes indicar 1.0.* como versión del paquete y en 
realidad, estás instalando la versión dev-master. 
Alias temporal: 
"monolog/monolog": "dev-bugfix as 1.0.x-dev"
P,q($&$- '$/ -*-&$", 
Representan a elementos instalados en tu servidor 
Permiten chequear las dependencias con PHP, sus 
extensiones y a algunas librerías del sistema 
$ composer show --platform
P(b/*),r p,q($&$ $% 
P,)3,4*-&
P(b/*),r p,q($&$ $% P,)3,4*-&
P(b/*),r p,q($&$ $% P,)3,4*-&
P(b/*),r p,q($&$ $% P,)3,4*-&
P(b/*),r p,q($&$ $% P,)3,4*-&
P(b/*),r p,q($&$ $% P,)3,4*-&
S)r*p&-
S)r*p&- 
Permiten ejecutar acciones al producirse alguno de los eventos 
definidos por Composer 
• pre | post-install-cmd 
• pre | post-update-cmd 
• pre | post-package-install 
• pre | post-package-update 
• pre | post-package-uninstall 
• pre | post-autoload-dump 
• post-root-package-install 
• post-create-project-cmd 
Solamente se ejecutan los scripts del paquete principal, 
por lo que los scripts definidos en los archivos composer.json de las 
dependencias, no se ejecutan.
S)r*p&- 
Ejemplo de archivo de configuración composer.json con scripts:
S)r*p&- 
Ejemplo de como podría ser la clase MyVendorMyClass:
I%-&,/,'!r$-
I%-&,/,'!r$- 
Permiten personalizar la lógica de instalación de los paquetes. 
Symfony2, Aura, Yii, Yii2 incluyen instaladores propios. 
Podemos utilizar los instaladores oficiales: 
(https://github.com/composer/installers) 
• Drupal 
• Laravel 
• Magento 
• WordPress 
• CakePHP 
• Moodle 
• phpBB 
• CodeIgniter 
• ¡Y muchos más!
U-,%'! (% *%-&,/,'!r 
Este ejemplo muestra el fichero composer.json de un paquete que 
usa el instalador “phpdocumentor-template”
U-,%'! (% *%-&,/,'!r 
Este ejemplo muestra el fichero composer.json de un paquete que 
usa el instalador “phpdocumentor-template” 
Tipo que determina el 
instalador.
U-,%'! (% *%-&,/,'!r 
Este ejemplo muestra el fichero composer.json de un paquete que 
usa el instalador “phpdocumentor-template” 
Dependencia que añade el 
código del instalador.
Cr$,%'! (% *%-&,/,'!r 
Un instalador es un paquete compuesto como mínimo por dos 
archivos: 
1. Archivo composer.json de tipo composer-installer, que 
define el paquete 
2. Clase del instalador que implementa la interfaz 
ComposerInstallerInstallerInterface 
• supports() 
• isInstalled() 
• install() 
• update() 
• uninstall() 
• getInstallPath()
Cr$,%'! (% *%-&,/,'!r 
Este ejemplo muestra el fichero composer.json de un paquete 
instalador.
Cr$,%'! (% *%-&,/,'!r 
Este ejemplo muestra el fichero composer.json de un paquete 
instalador. 
Paquete de tipo instalador.
Cr$,%'! (% *%-&,/,'!r 
Este ejemplo muestra el fichero composer.json de un paquete 
instalador. 
Paquete de tipo instalador. 
Clase del instalador.
Cr$,%'! (% *%-&,/,'!r
I%-&,/,)*+% '$ S,&*-
I%-&,/,)*+% '$ S,&*- 
1º- Instalamos SATIS con Composer ejecutando el siguiente comando: 
# composer create-project composer/satis –s dev!
I%-&,/,)*+% '$ S,&*- 
1º- Instalamos SATIS con Composer ejecutando el siguiente comando: 
# composer create-project composer/satis –s dev! 
2º- Definimos la configuración de SATIS, para ello, creamos el 
fichero satis.json en la carpeta de instalación.
I%-&,/,)*+% '$ S,&*- 
3º- Ejecutamos el siguiente comando para crear el repositorio de 
paquetes: 
# php bin/satis build satis.json web/! 
Satis lee el archivo de configuración satis.json y crea un repositorio 
estático de paquetes dentro del directorio web/ 
Se recomienda crear un cron con este comando para automatizar la 
actualización de nuestro repositorio.
I%-&,/,)*+% '$ S,&*- 
4º- Por último, crea un virtual host en tu servidor web que apunte al 
directorio web/ anterior y ya dispondrás de tu propio mini-Packagist.
A/4(%,- )*fr,-
A/4(%,- )*fr,- 
4.461 
1.179 
forks 
stars
A/4(%,- )*fr,- 
38.981 
paquetes
A/4(%,- )*fr,- 
154.226 
versiones
A/4(%,- )*fr,- 
350.254.159 
paquetes instalados 
(desde 13/04/2012)
R$)(r-#
R$)(r-# 
• getcomposer.org 
• librosweb.es/composer 
• packagist.org 
• github.com/composer
¡Gr,)*,-! 
¿Pr$4(%&,-? 
Javier Núñez 
@javiernuber 
javiernuber@gmail.com

Más contenido relacionado

La actualidad más candente

Introduction to Powershell Version 5
Introduction to Powershell Version 5Introduction to Powershell Version 5
Introduction to Powershell Version 5Nishtha Kesarwani
 
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...Edureka!
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020Ji-Woong Choi
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewDiacode
 
An Introduction To Jenkins
An Introduction To JenkinsAn Introduction To Jenkins
An Introduction To JenkinsKnoldus Inc.
 
Starting with Git & GitHub
Starting with Git & GitHubStarting with Git & GitHub
Starting with Git & GitHubNicolás Tourné
 
Maintainable CSS
Maintainable CSSMaintainable CSS
Maintainable CSSStephen Hay
 
Asynchronous JS in Odoo
Asynchronous JS in OdooAsynchronous JS in Odoo
Asynchronous JS in OdooOdoo
 
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개Ian Choi
 
하이퍼커넥트 데이터 팀이 데이터 증가에 대처해온 기록
하이퍼커넥트 데이터 팀이 데이터 증가에 대처해온 기록하이퍼커넥트 데이터 팀이 데이터 증가에 대처해온 기록
하이퍼커넥트 데이터 팀이 데이터 증가에 대처해온 기록Jaehyeuk Oh
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기GunHee Lee
 
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다Arawn Park
 
Manual de instalación de pentaho para windows 7
Manual de instalación de pentaho para windows 7Manual de instalación de pentaho para windows 7
Manual de instalación de pentaho para windows 7German Pinchao
 
Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용흥배 최
 

La actualidad más candente (20)

A Hands-on Introduction to Docker
A Hands-on Introduction to DockerA Hands-on Introduction to Docker
A Hands-on Introduction to Docker
 
Introduction to Powershell Version 5
Introduction to Powershell Version 5Introduction to Powershell Version 5
Introduction to Powershell Version 5
 
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
 
Git training v10
Git training v10Git training v10
Git training v10
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
Powershell Demo Presentation
Powershell Demo PresentationPowershell Demo Presentation
Powershell Demo Presentation
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overview
 
An Introduction To Jenkins
An Introduction To JenkinsAn Introduction To Jenkins
An Introduction To Jenkins
 
Starting with Git & GitHub
Starting with Git & GitHubStarting with Git & GitHub
Starting with Git & GitHub
 
Maintainable CSS
Maintainable CSSMaintainable CSS
Maintainable CSS
 
Vagrant
VagrantVagrant
Vagrant
 
Asynchronous JS in Odoo
Asynchronous JS in OdooAsynchronous JS in Odoo
Asynchronous JS in Odoo
 
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
 
하이퍼커넥트 데이터 팀이 데이터 증가에 대처해온 기록
하이퍼커넥트 데이터 팀이 데이터 증가에 대처해온 기록하이퍼커넥트 데이터 팀이 데이터 증가에 대처해온 기록
하이퍼커넥트 데이터 팀이 데이터 증가에 대처해온 기록
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기
 
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
 
Manual de instalación de pentaho para windows 7
Manual de instalación de pentaho para windows 7Manual de instalación de pentaho para windows 7
Manual de instalación de pentaho para windows 7
 
Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용
 
Presentacion git
Presentacion gitPresentacion git
Presentacion git
 

Destacado

Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Raul Fraile
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularFreelancer
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Edgar Dueñas
 
LOS MEDIOS Y LAS TECNOLOGIAS DE LA INFORMACIÓN
LOS MEDIOS Y LAS TECNOLOGIAS  DE LA INFORMACIÓNLOS MEDIOS Y LAS TECNOLOGIAS  DE LA INFORMACIÓN
LOS MEDIOS Y LAS TECNOLOGIAS DE LA INFORMACIÓNoldadu
 
TDR Contratación Firma de Abogados Consultoría Fiscal y Legal
TDR Contratación Firma de Abogados Consultoría Fiscal y LegalTDR Contratación Firma de Abogados Consultoría Fiscal y Legal
TDR Contratación Firma de Abogados Consultoría Fiscal y LegalFundación Col
 
Jose choco
Jose chocoJose choco
Jose chocojavier
 
Logo Design trends 2013
Logo Design trends 2013Logo Design trends 2013
Logo Design trends 2013wowdesign
 
I phone ios4_manual_del_usuario
I phone ios4_manual_del_usuarioI phone ios4_manual_del_usuario
I phone ios4_manual_del_usuariochamorre
 
4. perspectivas vef caf+® 2015 ing. rigoberto gonz+ílez g+¦mez
4. perspectivas vef caf+® 2015 ing. rigoberto gonz+ílez g+¦mez4. perspectivas vef caf+® 2015 ing. rigoberto gonz+ílez g+¦mez
4. perspectivas vef caf+® 2015 ing. rigoberto gonz+ílez g+¦mezSINAVEF_LAB
 
Adopción de menores por parejas del mismos sexo
Adopción de menores por parejas del mismos sexoAdopción de menores por parejas del mismos sexo
Adopción de menores por parejas del mismos sexoisa
 
West London College Application process 2013
West London College Application process 2013West London College Application process 2013
West London College Application process 2013Abhishek Bajaj
 
Política municipal de gestión diferencial de comunidades vulnerable desde el ...
Política municipal de gestión diferencial de comunidades vulnerable desde el ...Política municipal de gestión diferencial de comunidades vulnerable desde el ...
Política municipal de gestión diferencial de comunidades vulnerable desde el ...Gloria_Gamez
 
Reporte Trimestral Julio - Septiembre 2015 - MFC Latinoamericano
Reporte Trimestral Julio - Septiembre 2015 - MFC LatinoamericanoReporte Trimestral Julio - Septiembre 2015 - MFC Latinoamericano
Reporte Trimestral Julio - Septiembre 2015 - MFC LatinoamericanoMfc Nacional
 
Concervacion de forrajes
Concervacion de forrajesConcervacion de forrajes
Concervacion de forrajeskeviney_zr
 
Desarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyDesarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyJuan Eladio Sánchez Rosas
 

Destacado (20)

Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
 
REST - deSymfony2012
REST - deSymfony2012REST - deSymfony2012
REST - deSymfony2012
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Roll up Design
Roll up DesignRoll up Design
Roll up Design
 
LOS MEDIOS Y LAS TECNOLOGIAS DE LA INFORMACIÓN
LOS MEDIOS Y LAS TECNOLOGIAS  DE LA INFORMACIÓNLOS MEDIOS Y LAS TECNOLOGIAS  DE LA INFORMACIÓN
LOS MEDIOS Y LAS TECNOLOGIAS DE LA INFORMACIÓN
 
TDR Contratación Firma de Abogados Consultoría Fiscal y Legal
TDR Contratación Firma de Abogados Consultoría Fiscal y LegalTDR Contratación Firma de Abogados Consultoría Fiscal y Legal
TDR Contratación Firma de Abogados Consultoría Fiscal y Legal
 
Ca urotelio
Ca urotelioCa urotelio
Ca urotelio
 
Jose choco
Jose chocoJose choco
Jose choco
 
Logo Design trends 2013
Logo Design trends 2013Logo Design trends 2013
Logo Design trends 2013
 
I phone ios4_manual_del_usuario
I phone ios4_manual_del_usuarioI phone ios4_manual_del_usuario
I phone ios4_manual_del_usuario
 
4. perspectivas vef caf+® 2015 ing. rigoberto gonz+ílez g+¦mez
4. perspectivas vef caf+® 2015 ing. rigoberto gonz+ílez g+¦mez4. perspectivas vef caf+® 2015 ing. rigoberto gonz+ílez g+¦mez
4. perspectivas vef caf+® 2015 ing. rigoberto gonz+ílez g+¦mez
 
Adopción de menores por parejas del mismos sexo
Adopción de menores por parejas del mismos sexoAdopción de menores por parejas del mismos sexo
Adopción de menores por parejas del mismos sexo
 
West London College Application process 2013
West London College Application process 2013West London College Application process 2013
West London College Application process 2013
 
Campañas de mk internet. éxitos y fracasos
Campañas de mk internet. éxitos y fracasosCampañas de mk internet. éxitos y fracasos
Campañas de mk internet. éxitos y fracasos
 
Política municipal de gestión diferencial de comunidades vulnerable desde el ...
Política municipal de gestión diferencial de comunidades vulnerable desde el ...Política municipal de gestión diferencial de comunidades vulnerable desde el ...
Política municipal de gestión diferencial de comunidades vulnerable desde el ...
 
32 42 la sembradora del mal www.gftaognosticaespiritual.org
32 42 la sembradora del mal www.gftaognosticaespiritual.org32 42 la sembradora del mal www.gftaognosticaespiritual.org
32 42 la sembradora del mal www.gftaognosticaespiritual.org
 
Reporte Trimestral Julio - Septiembre 2015 - MFC Latinoamericano
Reporte Trimestral Julio - Septiembre 2015 - MFC LatinoamericanoReporte Trimestral Julio - Septiembre 2015 - MFC Latinoamericano
Reporte Trimestral Julio - Septiembre 2015 - MFC Latinoamericano
 
Concervacion de forrajes
Concervacion de forrajesConcervacion de forrajes
Concervacion de forrajes
 
Desarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyDesarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfony
 

Similar a Gestionar dependencias PHP

La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfRaaulroodriguez
 
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamenteCrea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamenteKuboosoft
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
Docker en el entorno de desarrollo
Docker en el entorno de desarrolloDocker en el entorno de desarrollo
Docker en el entorno de desarrolloAlejandro Hernández
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completoMETROPOLITANO
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoErnesto Gamboa
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completoUbeimar Navarro Herrera
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoIgnacio Reyes
 
633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)Eduardo Monroy Husillos
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoAlberto Martinez
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoAndrés Amaya
 

Similar a Gestionar dependencias PHP (20)

Composer
ComposerComposer
Composer
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
Composer & SemVer
Composer & SemVerComposer & SemVer
Composer & SemVer
 
33 php
33 php33 php
33 php
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
 
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamenteCrea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
Crea tus instaladores para linux (fedora, ubuntu, etc) sencillamente
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
Docker en el entorno de desarrollo
Docker en el entorno de desarrolloDocker en el entorno de desarrollo
Docker en el entorno de desarrollo
 
Que es php
Que es phpQue es php
Que es php
 
Que es php
Que es phpQue es php
Que es php
 
Que es php
Que es phpQue es php
Que es php
 
Pdf
PdfPdf
Pdf
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 

Gestionar dependencias PHP

  • 1. C!"p#$r Gestionando dependencias en PHP Javier Núñez @javiernuber Septiembre 2014
  • 2.
  • 4. D$p$%'$%)*,- Casi cualquier código que escribimos termina dependiendo de librerías de terceros (para que vamos a reinventar la rueda) APP
  • 5. D$p$%'$%)*,- Según van aumentando las dependencias se complica su gestión. APP
  • 6.
  • 7. ¿Q(. $- C!"p#$r? “Composer es una herramienta para la gestión de dependencias en aplicaciones PHP que permite definir las librerías de las que depende nuestro proyecto y se encarga de instalarlas de forma automática.”
  • 8. ¿Q(. $- C!"p#$r? “Composer es una herramienta para la gestión de dependencias en aplicaciones PHP que permite definir las librerías de las que depende nuestro proyecto y se encarga de instalarlas de forma automática.” • 1ª released el 1 de Marzo de 2012
  • 9. ¿Q(. $- C!"p#$r? “Composer es una herramienta para la gestión de dependencias en aplicaciones PHP que permite definir las librerías de las que depende nuestro proyecto y se encarga de instalarlas de forma automática.” • 1ª released el 1 de Marzo de 2012 • Se inspira en NPM o Bundler
  • 10. ¿Q(. $- C!"p#$r? “Composer es una herramienta para la gestión de dependencias en aplicaciones PHP que permite definir las librerías de las que depende nuestro proyecto y se encarga de instalarlas de forma automática.” • 1ª released el 1 de Marzo de 2012 • Se inspira en NPM o Bundler • 100% PHP
  • 11. ¿Q(. $- C!"p#$r? “Composer es una herramienta para la gestión de dependencias en aplicaciones PHP que permite definir las librerías de las que depende nuestro proyecto y se encarga de instalarlas de forma automática.” • 1ª released el 1 de Marzo de 2012 • Se inspira en NPM o Bundler • 100% PHP • Utiliza componentes de Symfony :)
  • 12. ¿Q(. $- C!"p#$r? “Composer es una herramienta para la gestión de dependencias en aplicaciones PHP que permite definir las librerías de las que depende nuestro proyecto y se encarga de instalarlas de forma automática.” • 1ª released el 1 de Marzo de 2012 • Se inspira en NPM o Bundler • 100% PHP • Utiliza componentes de Symfony :) • Permite autocargar nuestros paquetes
  • 13. ¿Q(. $- C!"p#$r? “Composer es una herramienta para la gestión de dependencias en aplicaciones PHP que permite definir las librerías de las que depende nuestro proyecto y se encarga de instalarlas de forma automática.” • 1ª released el 1 de Marzo de 2012 • Se inspira en NPM o Bundler • 100% PHP • Utiliza componentes de Symfony :) • Permite autocargar nuestros paquetes • Muy simple de instalar y utilizar
  • 14. ¿Q(. !)(rr$ )!% PEAR? PEAR fue y sigue siendo una opción viable, sin embargo, ha sido abandonada por muchos desarrolladores de PHP en los últimos años. Algunas razones: • Trabaja a nivel global de sistema • Una versión por paquete y máquina • Sólo dist, no source • No permite diferentes orígenes • Dificultad para aportar nuevo paquetes • Gran número de paquetes desactualizados
  • 16. Instalación local: I%-&,/,r C!"p#$r $ curl -sS https://getcomposer.org/installer | php Instalación global: $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer $ sudo chmod +x /usr/local/bin/composer Composer require PHP 5.3.2+
  • 17. I%-&,/,r C!"p#$r Listado de comandos $ composer list El comando help muestra información sobre un comando $ composer help install
  • 18. A)&(,/0,r C!"p#$r Instalación local: $ php composer.phar self-update Instalación global: $ sudo composer self-update
  • 19. U-,%'! C!"p#$r $% &( pr!1$)&!
  • 20. D$2%*$%'! '$p$%'$%)*,- Las dependencias se definen en un archivo llamado composer.json Este fichero tiene que estar situado en la carpeta raíz del proyecto $ cd ~/proyecto $ vim composer.json
  • 21. D$2%*$%'! '$p$%'$%)*,- Las dependencias se definen en un archivo llamado composer.json Este fichero tiene que estar situado en la carpeta raíz del proyecto $ cd ~/proyecto $ vim composer.json Nombre del paquete ‘creador’/’proyecto’
  • 22. D$2%*$%'! '$p$%'$%)*,- Las dependencias se definen en un archivo llamado composer.json Este fichero tiene que estar situado en la carpeta raíz del proyecto $ cd ~/proyecto $ vim composer.json Nombre del paquete ‘creador’/’proyecto’ Versión
  • 23. D$2%*$%'! '$p$%'$%)*,- También es posible generar las dependencias de forma interactiva. $ composer init Al ejecutar el comando init, tendrás que contestar varias preguntas cuyos valores se emplean para rellenar las opciones del archivo composer.json $ composer require silex/silex “~1.2” Añade nuevas dependencias en el archivo composer.json y además instala o actualiza las dependencias
  • 24. V$r-*!%$- '$ p,q($&$- 1.2.3 : Versión específica, indica exactamente una versión. >=1.0,<2.0 : Rango de versiones, operadores (>, >=, <, <=, !=) 1.0.* : Comodines, indican la versión requerida con un comodín (*) ~1.2 : Siguiente versión significativa, es equivalente a >=1.2,<2.0
  • 25. I%-&,/,%'! '$p$%'$%)*,- $ composer install
  • 27. I%-&,/,%'! '$p$%'$%)*,- Dependencias de nuestra dependencia Nuestra dependencia
  • 28. I%-&,/,%'! '$p$%'$%)*,- Dependencias de nuestra dependencia Nuestra dependencia Sugerencias
  • 30. E-&r()&(r, '$ '*r$)&!r*# Definición de dependencias
  • 31. E-&r()&(r, '$ '*r$)&!r*# Fichero con versiones exactas instaladas
  • 32. E-&r()&(r, '$ '*r$)&!r*# Carpeta donde se descargan las dependencias
  • 33. E-&r()&(r, '$ '*r$)&!r*# Fichero de autocarga
  • 34. E-&r()&(r, '$ '*r$)&!r*# Carpeta propia de composer para su gestión interna
  • 35. E-&r()&(r, '$ '*r$)&!r*# Carpetas de paquetes descargados
  • 36. C!"p#$r./!)3 Después de instalar las dependencias, composer crea un archivo con las versiones exactas que ha instalado de cada librería. $ composer install Usará composer.lock, si no existe utilizará composer.json y generará a composer.lock $ composer update Usará composer.json y actualizará composer.lock Versiona composer.lock en tu repositorio de código. Cualquier persona involucrada en el proyecto trabajará con las mismas versiones.
  • 40. 5p! '$ r$p#*&!r*! C!"p#$r Packagist • Por defecto es el único que está disponible • Es el repositorio central de Composer • Actúa de proxy entre repositorios VCS y usuarios Composer • Lugar donde encontrar librerías para tu proyecto • Es de software libre, por lo que lo puedes instalar en tu servidor Es posible desactivar este repositorio:
  • 41. 5p! '$ r$p#*&!r*! C!"p#$r Satis Es una versión ultra-ligera y ultra-simplificada de Packagist. Ideal para proyectos privados, es muy fácil de usar.
  • 42. 5p! '$ r$p#*&!r*! VCS (4*&, -v% …)
  • 44. 5p! '$ r$p#*&!r*! P,)3,4$
  • 45. C!"! )r$,r (% p,q($&$ *%-&,/,b/$
  • 46. C!"! )r$,r (% p,q($&$ *%-&,/,b/$ 1. Creamos un fichero composer.json con la configuración del paquete 2. Subimos el código a un repositorio, por ejemplo github 3. Nos creamos una cuenta en Packagist.org y registramos nuestra librería diciéndole donde está el repositorio del código. 4. ¡Ya podemos utilizar el paquete en nuestros proyectos!
  • 48. )!"p#$r.6-!% Nombre del paquete (creador/proyecto) Es obligatorio, para publicar un paquete
  • 49. )!"p#$r.6-!% Indica el tipo de paquete, que por defecto se establece a library. Soporta por defecto 4 tipos: • library • project • metapackage • composer-installer
  • 50. )!"p#$r.6-!% Se emplea para definir brevemente el propósito del paquete
  • 51. )!"p#$r.6-!% Se trata de un array de palabras clave o etiquetas
  • 52. )!"p#$r.6-!% Establece la URL del sitio web oficial del paquete
  • 53. )!"p#$r.6-!% Indica la licencia bajo la que se publica el paquete
  • 54. )!"p#$r.6-!% Indica el autor o autores del paquete
  • 55. )!"p#$r.6-!% Para definir las dependencias del paquete que obligatoriamente de deben instalar
  • 56. )!"p#$r.6-!% Esta propiedad permite configurar la carga automática de clases
  • 57. PHP-FIG PHP-FIG: PHP Framework Interop Group Es un grupo desarrolladores y representantes de la comunidad PHP, que se han unido con el ánimo de unificar el ecosistema de frameworks, librerías, componentes y aplicaciones desarrolladas en PHP. PSR es la sigla de PHP Standards Recommendation • PSR-0: Autoloading Stándard • PSR-1: Basic Coding Standard • PSR-2: Coding Style Guide • PSR-3: Logger Interface • PSR-4: Improved Autoloading http://www.php-fig.org
  • 59. 5p# '$ A(&!/!,'*%4 Autoload PSR-0 Por ejemplo PHPCaceresMylibraryClass.php se ubicaría en: vendor/nombre_paquete/src/PhpCaceres/Library/Class.php Algunos paquetes necesitan la propiedad "target-dir": "Symfony/Component/Yaml"
  • 60. 5p# '$ A(&!/!,'*%4 Autoload PSR-4 (tipo recomendado) Por ejemplo PHPCaceresMylibraryClass.php se ubicaría en: vendor/nombre_paquete/Class.php
  • 61. 5p# '$ A(&!/!,'*%4 Esta definición PSR-0 { "autoload": { "psr-0": { "FooBar": "src/” } } } Equivale a esta definición PSR-4 { "autoload": { "psr-4": { "FooBar": "src/Foo/Bar/” } } }
  • 62. 5p# '$ A(&!/!,'*%4 Otras librerías
  • 63. 5p# '$ A(&!/!,'*%4 Helpers y funciones
  • 64. Op&*"0,%'! /, ,(&!),r4, Es posible mejorar el rendimiento de la aplicación convirtiendo la carga automática de clases de PSR-0 y PSR-4 en un mapa de clases. $ composer dump-autoload -o También puedes hacerlo con los comandos install y update $ composer install -o $ composer update -o
  • 65. V$r-*+% '$/ P,q($&$ Semantic versioning (http://semver.org) Formato X.Y.Z
  • 66. V$r-*+% '$/ P,q($&$ Semantic versioning (http://semver.org) Patch, solo arreglos o bug Formato X.Y.Z
  • 67. V$r-*+% '$/ P,q($&$ Semantic versioning (http://semver.org) Patch, solo arreglos o bug Formato X.Y.Z Minor, nueva funcionalidad compatible con la versión anterior
  • 68. V$r-*+% '$/ P,q($&$ Semantic versioning (http://semver.org) Patch, solo arreglos o bug Formato X.Y.Z Minor, nueva funcionalidad compatible con la versión anterior Major, cambio no compatible con la versión anterior
  • 69. V$r-*+% '$/ P,q($&$ Podemos indicar la versión de forma explicita { "version": "1.0.0" }
  • 70. V$r-*+% '$/ P,q($&$ Si tenemos nuestro proyecto en SVN, la versión se obtiene automáticamente analizando sus Tags y Ramas Basado en Tags • 1.0.0 • v1.0.0 Basado en Ramas • 1.10.5-RC1 • v5.6.10beta2 • v2.2.2-alpha • v2.0.3-p1 Si el nombre de la rama se parece a una versión, el nombre de la versión será {nombre_de_rama}-dev si no dev-{nombre_de_rama}. • 2.0.x-dev • dev-master • 2.0.0.x-dev • dev-bugfix
  • 71. L, pr!p*$',' "*%*"("--&,b*/*&1 El valor por defecto es stable Los valores disponibles para esta opción por orden ascendente: dev, alpha, beta, RC y stable { "minimum-stability": "stable" } Definir una dependencia para que pueda instalarse si tiene estabilidad inferior. "dmd/dms": "1.0.0@dev"
  • 72. D$2%*$%'! $/ ,/*,- '$ (%, r,", Ya puedes indicar 1.0.* como versión del paquete y en realidad, estás instalando la versión dev-master. Alias temporal: "monolog/monolog": "dev-bugfix as 1.0.x-dev"
  • 73. P,q($&$- '$/ -*-&$", Representan a elementos instalados en tu servidor Permiten chequear las dependencias con PHP, sus extensiones y a algunas librerías del sistema $ composer show --platform
  • 74. P(b/*),r p,q($&$ $% P,)3,4*-&
  • 75. P(b/*),r p,q($&$ $% P,)3,4*-&
  • 76. P(b/*),r p,q($&$ $% P,)3,4*-&
  • 77. P(b/*),r p,q($&$ $% P,)3,4*-&
  • 78. P(b/*),r p,q($&$ $% P,)3,4*-&
  • 79. P(b/*),r p,q($&$ $% P,)3,4*-&
  • 81. S)r*p&- Permiten ejecutar acciones al producirse alguno de los eventos definidos por Composer • pre | post-install-cmd • pre | post-update-cmd • pre | post-package-install • pre | post-package-update • pre | post-package-uninstall • pre | post-autoload-dump • post-root-package-install • post-create-project-cmd Solamente se ejecutan los scripts del paquete principal, por lo que los scripts definidos en los archivos composer.json de las dependencias, no se ejecutan.
  • 82. S)r*p&- Ejemplo de archivo de configuración composer.json con scripts:
  • 83. S)r*p&- Ejemplo de como podría ser la clase MyVendorMyClass:
  • 85. I%-&,/,'!r$- Permiten personalizar la lógica de instalación de los paquetes. Symfony2, Aura, Yii, Yii2 incluyen instaladores propios. Podemos utilizar los instaladores oficiales: (https://github.com/composer/installers) • Drupal • Laravel • Magento • WordPress • CakePHP • Moodle • phpBB • CodeIgniter • ¡Y muchos más!
  • 86. U-,%'! (% *%-&,/,'!r Este ejemplo muestra el fichero composer.json de un paquete que usa el instalador “phpdocumentor-template”
  • 87. U-,%'! (% *%-&,/,'!r Este ejemplo muestra el fichero composer.json de un paquete que usa el instalador “phpdocumentor-template” Tipo que determina el instalador.
  • 88. U-,%'! (% *%-&,/,'!r Este ejemplo muestra el fichero composer.json de un paquete que usa el instalador “phpdocumentor-template” Dependencia que añade el código del instalador.
  • 89. Cr$,%'! (% *%-&,/,'!r Un instalador es un paquete compuesto como mínimo por dos archivos: 1. Archivo composer.json de tipo composer-installer, que define el paquete 2. Clase del instalador que implementa la interfaz ComposerInstallerInstallerInterface • supports() • isInstalled() • install() • update() • uninstall() • getInstallPath()
  • 90. Cr$,%'! (% *%-&,/,'!r Este ejemplo muestra el fichero composer.json de un paquete instalador.
  • 91. Cr$,%'! (% *%-&,/,'!r Este ejemplo muestra el fichero composer.json de un paquete instalador. Paquete de tipo instalador.
  • 92. Cr$,%'! (% *%-&,/,'!r Este ejemplo muestra el fichero composer.json de un paquete instalador. Paquete de tipo instalador. Clase del instalador.
  • 95. I%-&,/,)*+% '$ S,&*- 1º- Instalamos SATIS con Composer ejecutando el siguiente comando: # composer create-project composer/satis –s dev!
  • 96. I%-&,/,)*+% '$ S,&*- 1º- Instalamos SATIS con Composer ejecutando el siguiente comando: # composer create-project composer/satis –s dev! 2º- Definimos la configuración de SATIS, para ello, creamos el fichero satis.json en la carpeta de instalación.
  • 97. I%-&,/,)*+% '$ S,&*- 3º- Ejecutamos el siguiente comando para crear el repositorio de paquetes: # php bin/satis build satis.json web/! Satis lee el archivo de configuración satis.json y crea un repositorio estático de paquetes dentro del directorio web/ Se recomienda crear un cron con este comando para automatizar la actualización de nuestro repositorio.
  • 98. I%-&,/,)*+% '$ S,&*- 4º- Por último, crea un virtual host en tu servidor web que apunte al directorio web/ anterior y ya dispondrás de tu propio mini-Packagist.
  • 100. A/4(%,- )*fr,- 4.461 1.179 forks stars
  • 103. A/4(%,- )*fr,- 350.254.159 paquetes instalados (desde 13/04/2012)
  • 105. R$)(r-# • getcomposer.org • librosweb.es/composer • packagist.org • github.com/composer
  • 106. ¡Gr,)*,-! ¿Pr$4(%&,-? Javier Núñez @javiernuber javiernuber@gmail.com