SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
Composer
Dependency management for PHP
What’s up!
•  Soy Adán Lobato
•  Soy de Barcelona
•  Soy software developer
•  Trabajo en SocialPoint
•  Mi twitter es @adanlobato

¡Interrumpidme cuando queráis!
2
Agenda
•  Composer Basics
•  Mastering Composer
•  Bottlenecks
•  Enlaces de interés
•  ¿Preguntas?

3
Composer Basics
¿Qué es Composer?
Es una herramienta que nos permite definir cuáles son las librerías de
las que depende nuestro proyecto y las instala por nosotros.

Jordi Boggiano (@seldaek)

5
¿Es un concepto nuevo?
•  En python existe pip
•  En javascript existe npm
•  En ruby existe bundler
•  En php existe… ¿ PEAR / Pyrus ?

6
7
¿Alternativas en PHP?
PEAR

Pyrus

Composer

Instalación

Global

Global/Local

Global*/Local

Package types

Dist

Dist

Dist/Source

PEAR support

Yes

Yes

Yes

VCS support

No

No

Yes

(*) Only CLI applications
8
Instalación
Instalación
curl -S http://getcomposer.org/installer | php

10
Instalación
$ php composer.phar
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ /
/ __ / __ `__ / __ / __ / ___/ _ / ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
____/____/_/ /_/ /_/ .___/____/____/___/_/
/_/
Composer version 3da05c68f9561fa822c522b1815435ff990493ff 2013-10-02 14:25:06
Usage:
[options] command [arguments]
Available commands:
init
Creates a basic composer.json file in current directory.
install
Installs the project dependencies from the composer.lock file...
require
Adds required packages to your composer.json and installs them
search
Search for packages
self-update
Updates composer.phar to the latest version.
show
Show information about packages
status
Show a list of locally modified packages
update
Updates your dependencies to the latest version according to...
validate
Validates a composer.json

11
Instalación
01. $ sudo mv composer.phar /usr/local/bin/composer
02. $ sudo chmod +x /usr/local/bin
03. $ sudo composer self-update

12
Primeros pasos
Instalando dependencias
$ composer require twig/twig

14

"1.*"
Instalando dependencias

2.0.1
15
Instalando dependencias

2.0.*
16
Instalando dependencias

>=2.1,<3.0
17
Instalando dependencias

~2.1
18
Analizando el resultado
$ tree -L 3
├── composer.json
├── composer.lock
└── vendor
├── autoload.php
├── composer
│
├── ClassLoader.php
│
├── autoload_classmap.php
│
├── autoload_namespaces.php
│
├── autoload_real.php
│
└── installed.json
└── twig
└── twig

19
composer.json
01. {
02.

"require": {

03.
04.

"twig/twig" : "1.*"
}

05. }

20
composer.lock
•  Si existe, reemplaza a composer.json
•  Congela nuestras dependencias a una versión concreta
•  Permite que todo el equipo trabaje/testee sobre las mismas versiones
•  Imprescindible para deployments
•  Debe estar commiteado en el VCS de nuestro proyecto
•  Para actualizarlo: composer update

21
Autoloading
01. <?php
02. require_once __DIR__.'/vendor/autoload.php';
03.
04.
05.
06.
07. // Your code
22
Autoloading
01. <?php
02. $loader = require_once __DIR__.'/vendor/autoload.php';
03. $loader->add('MyNamespace', array('src'));
04. $loader->add('My_Namespace', array('src', 'lib'));
05. $loader->addClassmap($classmap);
06.
07. // Your code
23
Repositorios
Packagist
•  Repositorio central de paquetes de Composer
•  Actúa como proxy entre los repositorios VCS y los usuarios de Composer
•  Puede almacenar cualquier tipo de librería PHP: components, bundles,
plugins, módulos…
•  Todo proyecto Open Source debería estar en Packagist
•  Buen lugar dónde encontrar librerías para tu aplicación

25
VCS: git, svn, hg…
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/symfony/Yaml"
}
],
"require": {
"symfony/yaml": "2.3.*"
}
}

26
PEAR
{
"repositories": [
{
"type": "pear",
"url": "http://pear2.php.net"
}
],
"require": {
"pear-pear2.php.net/PEAR2_Text_Markdown": "*",
"pear-pear2/PEAR2_HTTP_Request": "*"
}
}

27
Repositorios sin composer.json
{

"repositories": [
{
"type": "package",
"package": {
"name": "smarty/smarty",
"version": "3.1.7",
"dist": {
"url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
"type": "zip"
},
"source": {
"url": "http://smarty-php.googlecode.com/svn/",
"type": "svn",
"reference": "tags/Smarty_3_1_7/distribution/"
},
"autoload": {
"classmap": ["libs/"]
}
}
}
],
"require": {
"smarty/smarty": "3.1.*"
}

28

}
Creando un
paquete
Creando un paquete
{

}

"name": "trovit/foo",
"description": "Super cool library for foo stuff",
"homepage": "http://foo.trovit.es",
"license": "MIT",
"authors": [
{ "name": "Trovit backend team", "email": "backend@trovit.es"}
],
"autoload": {
"psr-0": { "TrovitFoo": "src/" }
},
"require": {
"php": ">=5.3.2",
"ext-curl": "*",
"symfony/console": "2.3.~"
}

30
Creando un paquete: Autoloading
01. "autoload": {
02.

"psr-0": {

03.
04.

"TrovitFoo": "src/"
}

05. }

31
Creando un paquete: Autoloading
01. "autoload": {
02.

"psr-0": {

03.
04.

"Trovit_": "src/"
}

05. }

32
Creando un paquete: Autoloading
01. "autoload": {
02.

"classmap": ["src/", "lib/"]

03. }

33
Creando un paquete: Autoloading
01. "autoload": {
02.

"files": ["src/Trovit/functions.php"]

03. }

34
Scripts
Scripts
Permiten ejecutar acciones ante determinados eventos de Composer.

•  pre|post-install-cmd
•  pre|post-update-cmd
•  pre|post-package-install
•  pre|post-package-update

36
Scripts
{
"scripts": {
"post-install-cmd": [
"MyNamescapeScriptHandler::buildBootstrap"
],
"post-update-cmd": [
"rm -rf app/cache/*"
]
}
}

37
Instaladores
Instaladores oficiales
•  Wordpress
•  Drupal
•  CakePHP
•  CodeIgniter
•  Laravel
•  ¡Y muchos más!
http://github.com/composer/installers
39
Instaladores propios
http://getcomposer.org/doc/articles/custom-installers.md

40
Mastering
Composer
Semantic versioning

X.Y.Z
http://semver.org/spec/v2.0.0.html

42
Branch aliases
01. "extra": {
02.

"branch-alias": {

03.
04.

"dev-master": "1.0.x-dev"
}

05. }

43
Trabajando con forks
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/adanlobato/Yaml"
}
],
"require": {
"symfony/yaml": "dev-hotfix"
}
}

44
Trabajando con forks
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/adanlobato/Yaml"
}
],
"require": {
"symfony/yaml": "dev-hotfix as 1.0.x-dev"
}
}

45
Minimum stability
{
"minimum-stability": "stable",
"require": {
"symfony/config": "2.3",
"symfony/yaml": "2.3.*@dev",
"symfony/console": "2.3.*@beta"
}
}

46
Autoloading optimizado
$ composer dump-autoload --optimize

47
Repositorios privados: Satis
•  Es una versión reducida de Packagist
•  Se instala y se configura muy rápido
•  Es ideal para repositorios privados

48
Repositorios privados: Satis
$ composer create-project composer/satis

49
Repositorios privados: Satis
// config.json
{
"name": "Trovit Repository",
"homepage": "http://packages.trovit.es",
"require-all": true,
"repositories": [
{
"type": "git",
"url": "https://github.com/trovit/super-cool-library"
}
]
}

50
Repositorios privados: Satis
$ php bin/satis build config.json web/

51
Repositorios privados: Satis
Para protegerlo del exterior:

•  Basic HTTP Authentication
•  SSH
•  Red privada

52
Repositorios privados: Packagist
•  Packagist es Open Source
•  Puedes instalarte tu propio packagist
•  Soporta Github Webhooks

53
Bottlenecks
Bottlenecks
•  Dependency Solver
•  Github
•  Github post-receive hooks
•  Repositorios privados

55
Enlaces de interés
•  getcomposer.org
•  packagist.org
•  github.com/composer

56
¿Preguntas?

Más contenido relacionado

La actualidad más candente

Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Virtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y PuppetVirtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y Puppet
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Richard Moya
 
Nodejs.introduccion
Nodejs.introduccionNodejs.introduccion
Nodejs.introduccion
killfill
 
reto-by-q3rv0
reto-by-q3rv0reto-by-q3rv0
reto-by-q3rv0
q3rv0
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
Mariano Iglesias
 
Creación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y ExpressCreación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y Express
betabeers
 

La actualidad más candente (20)

Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Virtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y PuppetVirtualización y  Provisionamiento: Entornos de desarrollo con  Vagrant y Puppet
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
 
Entornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppetEntornos de desarrollo para symfony2 con vagrant y puppet
Entornos de desarrollo para symfony2 con vagrant y puppet
 
MythTV Mediacenter on an IGEPv2
MythTV Mediacenter on an IGEPv2 MythTV Mediacenter on an IGEPv2
MythTV Mediacenter on an IGEPv2
 
Nodejs.introduccion
Nodejs.introduccionNodejs.introduccion
Nodejs.introduccion
 
SSRF, la vulnerabilidad de las aplicaciones web modernas
SSRF, la vulnerabilidad de las aplicaciones web modernasSSRF, la vulnerabilidad de las aplicaciones web modernas
SSRF, la vulnerabilidad de las aplicaciones web modernas
 
reto-by-q3rv0
reto-by-q3rv0reto-by-q3rv0
reto-by-q3rv0
 
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
 
Usando Django con Docker
Usando Django con DockerUsando Django con Docker
Usando Django con Docker
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
 
Vagrant
VagrantVagrant
Vagrant
 
Vagrant
VagrantVagrant
Vagrant
 
Sandbox para ejercicios de programación
Sandbox para ejercicios de programaciónSandbox para ejercicios de programación
Sandbox para ejercicios de programación
 
Creación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y ExpressCreación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y Express
 
Buildout: Crear y desplegar entornos reproducibles en Python
Buildout: Crear y desplegar entornos reproducibles en PythonBuildout: Crear y desplegar entornos reproducibles en Python
Buildout: Crear y desplegar entornos reproducibles en Python
 
Introduccion a Nodejs
Introduccion a NodejsIntroduccion a Nodejs
Introduccion a Nodejs
 
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHPIntroducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
 
Gestionando servidores con Puppet
Gestionando servidores con PuppetGestionando servidores con Puppet
Gestionando servidores con Puppet
 
Primeros pasos con Docker
Primeros pasos con DockerPrimeros pasos con Docker
Primeros pasos con Docker
 
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balasPHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
 
Jenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemJenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker Ecosystem
 

Similar a Composer

Presentacion: ¿Que es Compilador?
Presentacion: ¿Que es Compilador?  Presentacion: ¿Que es Compilador?
Presentacion: ¿Que es Compilador?
Luis Stifler
 
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
METROPOLITANO
 
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
Ernesto Gamboa
 
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
Ignacio 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 completo
Alberto Martinez
 

Similar a Composer (20)

Cómo crear una distribución Linux
Cómo crear una distribución LinuxCómo crear una distribución Linux
Cómo crear una distribución Linux
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
 
Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP
 
Php andmysql
Php andmysqlPhp andmysql
Php andmysql
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
Docker en el entorno de desarrollo
Docker en el entorno de desarrolloDocker en el entorno de desarrollo
Docker en el entorno de desarrollo
 
Composer & SemVer
Composer & SemVerComposer & SemVer
Composer & SemVer
 
Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365Humanizacion de java script con typescript para d365
Humanizacion de java script con typescript para d365
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Clase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasosClase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasos
 
Presentacion: ¿Que es Compilador?
Presentacion: ¿Que es Compilador?  Presentacion: ¿Que es Compilador?
Presentacion: ¿Que es Compilador?
 
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosDesymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
 
Zeety open project manual de instalación
Zeety   open project manual de instalaciónZeety   open project manual de instalación
Zeety open project manual de instalación
 
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 mysqlphp
Tutorial mysqlphpTutorial mysqlphp
Tutorial mysqlphp
 
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
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (11)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 

Composer