SlideShare una empresa de Scribd logo
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

PDF
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
PDF
Introducción al framework Symfony
PDF
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
PDF
Despliegue de aplicaciones PHP
PDF
Creación de entornos de desarrollo con Vagrant
PPTX
Ansible administracion simplificada
PDF
Ataque por inyección de código sql y sniffing
PDF
Entorno de desarrollo rápido con Vagrant
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Introducción al framework Symfony
Vagrant para automatizar entornos DEV/PRO: VirtualBox y vSphere
Despliegue de aplicaciones PHP
Creación de entornos de desarrollo con Vagrant
Ansible administracion simplificada
Ataque por inyección de código sql y sniffing
Entorno de desarrollo rápido con Vagrant

La actualidad más candente (20)

ODP
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
PDF
Entornos de desarrollo para symfony2 con vagrant y puppet
PDF
MythTV Mediacenter on an IGEPv2
PPT
Nodejs.introduccion
PPTX
SSRF, la vulnerabilidad de las aplicaciones web modernas
PDF
reto-by-q3rv0
PDF
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
ODP
Usando Django con Docker
ODP
Node.js - Eventos para Todos
PDF
Vagrant
PDF
Sandbox para ejercicios de programación
PDF
Creación de aplicaciones web con Node.js y Express
ODP
Buildout: Crear y desplegar entornos reproducibles en Python
PPTX
Introduccion a Nodejs
PDF
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
ODP
Gestionando servidores con Puppet
PPTX
Primeros pasos con Docker
PDF
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PDF
Jenkins Peru Meetup Docker Ecosystem
Virtualización y Provisionamiento: Entornos de desarrollo con Vagrant y Puppet
Entornos de desarrollo para symfony2 con vagrant y puppet
MythTV Mediacenter on an IGEPv2
Nodejs.introduccion
SSRF, la vulnerabilidad de las aplicaciones web modernas
reto-by-q3rv0
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
Usando Django con Docker
Node.js - Eventos para Todos
Vagrant
Sandbox para ejercicios de programación
Creación de aplicaciones web con Node.js y Express
Buildout: Crear y desplegar entornos reproducibles en Python
Introduccion a Nodejs
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Gestionando servidores con Puppet
Primeros pasos con Docker
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
Jenkins Peru Meetup Docker Ecosystem
Publicidad

Similar a Composer (20)

PDF
Composer: Gestionando dependencias en PHP
PPTX
Composer & SemVer
PDF
Introducción a composer
PDF
Symfony2 Formacion y primeros pasos
PDF
Materiales del curso de Symfony2
PDF
Instalacion symfony2
PDF
Clase 3 instalación y primeros pasos
PDF
Introducción a Symfony
PDF
Componentes, el arma secreta de Symfony2
PDF
Slides components en
PPTX
Framework Laravel
PDF
Desarrollo rápido de apps web con laravel - DevAcademy
PDF
Deployer PHP. Presentación para #PHPSevilla
PDF
Desymfony 2011 - Introducción a Symfony2
PDF
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
PDF
Symfony en Drupal 8 - DrupalCamp Spain
PDF
PHP en el 2015
PDF
Symfony2
PPTX
BilboStack - Php en el 2012
Composer: Gestionando dependencias en PHP
Composer & SemVer
Introducción a composer
Symfony2 Formacion y primeros pasos
Materiales del curso de Symfony2
Instalacion symfony2
Clase 3 instalación y primeros pasos
Introducción a Symfony
Componentes, el arma secreta de Symfony2
Slides components en
Framework Laravel
Desarrollo rápido de apps web con laravel - DevAcademy
Deployer PHP. Presentación para #PHPSevilla
Desymfony 2011 - Introducción a Symfony2
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Symfony en Drupal 8 - DrupalCamp Spain
PHP en el 2015
Symfony2
BilboStack - Php en el 2012
Publicidad

Último (20)

PDF
Distribucion de frecuencia exel (1).pdf
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPTX
modulo seguimiento 1 para iniciantes del
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PPTX
ccna: redes de nat ipv4 stharlling cande
PPT
Protocolos de seguridad y mecanismos encriptación
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PPTX
El uso de las TIC en la vida cotidiana..
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Distribucion de frecuencia exel (1).pdf
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Propuesta BKP servidores con Acronis1.pptx
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
modulo seguimiento 1 para iniciantes del
CyberOps Associate - Cisco Networking Academy
Presentacion de Alba Curso Auditores Internos ISO 19011
ccna: redes de nat ipv4 stharlling cande
Protocolos de seguridad y mecanismos encriptación
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Mecanismos-de-Propagacion de ondas electromagneticas
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
El uso de las TIC en la vida cotidiana..
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.

Composer