SlideShare una empresa de Scribd logo
1 de 22
Composer & SemVer
Symfony Zaragoza
By Alejandro Celaya @acelayaa
Evolución de PHP
- Proyectos y estándares modernos.
http://www.php-fig.org/
- Desarrollo de componentes antes que
frameworks.
¿Qué es composer?
- Gestor de dependencias para proyectos
PHP. https://packagist.org/
- Otros: PEAR, Maven, Gradle, RubyGems,
Bundler, npm…
- “Composer is strongly inspired by node's
npm and ruby's bundler”.
¿Qué resuelve composer?
- Gestión de dependencias (de forma
recursiva)
- Actualización de dependencias
- Autoloading propio y de terceros
El estándar de Semantic Versioning
- SemVer: http://semver.org/
- Version 2.0.0: MAJOR.MINOR.PATCH
SemVer aplicado a composer
- Muchos proyectos PHP siguen el estándar
de SemVer.
- Mecanismos para asegurarnos de qué
versión vamos a instalar.
"vendor/package": "1.2.3"
"vendor/package": "2.0.*"
"vendor/package": ">=2.0"
"vendor/package": "~1.4"
Instalar composer
- Documentación de la web.
curl -sS https://getcomposer.org/installer | php
- De forma global.
chmod +x composer.phar
mv composer.phar /usr/local/bin/composer
Configuración de composer
{
"name": "symfony-zgz/silex-skeleton",
"description": "...",
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.5",
"silex/silex": "~1.0",
"silex/web-profiler": "~1.0",
"symfony/browser-kit": "~2.3",
"symfony/class-loader": "~2.3",
// ...
"doctrine/orm": "~2.0",
"zendframework/zend-stdlib": "~2.3"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~1.0"
},
"autoload": {
"psr-4": {
"SymfonyZgz": "src/"
}
},
"autoload-dev": {
"psr-4": {
"SymfonyZgzTest": "tests/"
}
}
}
Configuración de composer
- No hay que memorizar la estructura.
composer init
Bloques importantes
require y require-dev:
- Lista de componentes a instalar y su versión
Bloques importantes
autoload y autoload-dev:
- Reglas para cargar clases de forma
automática.
- Opciones: psr-0, psr-4, classmap y files.
Comandos principales
- Instalar dependencias por primera vez.
composer install
- Actualizar dependencias a la última versión válida.
composer update
- Actualizar el binario de composer.
composer self-update
- Regenerar el autoloader.
composer dump-autoload
Otros usos (avanzados)
Agregar dependencias
- No editar composer.json
- Requerir el componente para instalarlo.
composer require vendor/package:~1.0
- Instalarlo de forma global.
composer global require vendor/package:~1.0
Otros usos (avanzados)
Optimizar autoloader:
- Optimizar el rendimiento del autoloader para
producción.
composer dump-autoload --optimize
- Se generará un classmap en vez de iterar
directorios.
Otros usos (avanzados)
Dependencias de producción:
- No instalar los componentes de require-dev.
composer update --no-dev
- Descargamos el autoloader y reducimos
tamaño final.
- Con --optimize-autoloader generamos el
classmap autoloader en el mismo paso.
Otros usos (avanzados)
Repositorios privados:
- Permiten instalar dependencias de fuentes
distintas a packagist.
"repositories": [
{
"type": "vcs",
"url": "https://github.com/acelaya/composer-semver-talk.git"
}
]
Otros usos (avanzados)
Dependencias de PHP:
- Indicar que dependemos de una extensión o
versión de PHP determinados.
"require": {
"php": ">=5.5",
"ext-intl": "*",
"ext-sqlite": "*",
// ...
},
Otros usos (avanzados)
CLI scripts:
- Scripts del proyecto para ejecutar desde
consola.
"bin": [
"bin/print-something",
"bin/do-something"
]
Otros usos (avanzados)
Eventos:
- Callbacks y comandos que se ejecutan en
momentos determinados.
"scripts": {
"post-package-install": "SymfonyZgzMyClass::postPkgInstall",
"post-install-cmd": [
"SymfonyZgzMyClass::postInstall",
"phpunit -c app/"
],
}
Otros usos (avanzados)
Instalación de proyectos:
- Podemos distribuir proyectos enteros
mediante composer.
composer create-project vendor/package
"require": {
"php": ">=5.5.0",
"slim/slim": "~2.4",
"slim/views": "0.1.*",
"slimcontroller/slimcontroller": "~0.4",
"apache/log4php": "2.3.*",
"doctrine/orm": "2.4.*",
"doctrine/doctrine-module": "0.*",
"symfony/yaml": "2.*",
"symfony/process": "~2.4",
"symfony/console": "~2.4",
"league/flysystem": "0.5.*",
"aws/aws-sdk-php": "~2.5",
"zendframework/zend-form": "2.3.*",
"zendframework/zend-i18n": "2.3.*",
"zendframework/zend-servicemanager": "2.3.*",
"zendframework/zend-authentication": "2.3.*",
"zendframework/zend-session": "2.3.*",
"zendframework/zend-stdlib": "2.3.*",
"swiftmailer/swiftmailer": "5.2.*",
"endroid/qrcode": "1.2.*",
"twig/twig": "1.*",
"twig/extensions": "~1.1.0",
"dompdf/dompdf": "0.6.*",
"cocur/slugify": "~0.11"
}
Ejemplo
Enlaces
- Composer: https://getcomposer.org/
- SemVer: http://semver.org/
- Packagist: https://packagist.org/
- PHP-FIG: http://www.php-fig.org/
- Ejemplo: https://github.com/acelaya/composer-semver-talk
- SemVer checker: https://github.com/tomzx/php-semver-checker
- The PHP League: http://thephpleague.com/

Más contenido relacionado

La actualidad más candente

Desarrollo rapido de aplicaciones web en php con el framework cakephp + scaffold
Desarrollo rapido de aplicaciones web en php con el framework cakephp + scaffoldDesarrollo rapido de aplicaciones web en php con el framework cakephp + scaffold
Desarrollo rapido de aplicaciones web en php con el framework cakephp + scaffoldRefresh Maracaibo
 
Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Yaismel Miranda
 
Provisión Automática de máquinas con Ansible
Provisión Automática de máquinas con AnsibleProvisión Automática de máquinas con Ansible
Provisión Automática de máquinas con AnsibleCarlos Gimeno Yáñez
 
Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Moisés Maciá
 
Servidor Web Apache para Linux
Servidor Web Apache para LinuxServidor Web Apache para Linux
Servidor Web Apache para LinuxMaría del Cisne
 
Introducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos WebIntroducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos WebFacundo E. Goñi Perez
 
Servidores de aplicaciones para servicios web
Servidores de aplicaciones para servicios webServidores de aplicaciones para servicios web
Servidores de aplicaciones para servicios webmonse_pacheco
 
Silex para aplicaciones web MVC
Silex para aplicaciones web MVCSilex para aplicaciones web MVC
Silex para aplicaciones web MVCAsier Marqués
 
Introducción a PHPUnit
Introducción a PHPUnitIntroducción a PHPUnit
Introducción a PHPUnitAlicantePHP
 
Significado xampp
Significado xamppSignificado xampp
Significado xamppdavidmales
 

La actualidad más candente (20)

Desarrollo rapido de aplicaciones web en php con el framework cakephp + scaffold
Desarrollo rapido de aplicaciones web en php con el framework cakephp + scaffoldDesarrollo rapido de aplicaciones web en php con el framework cakephp + scaffold
Desarrollo rapido de aplicaciones web en php con el framework cakephp + scaffold
 
Introducción a Ansible
Introducción a AnsibleIntroducción a Ansible
Introducción a Ansible
 
Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1
 
Selenium
SeleniumSelenium
Selenium
 
Provisión Automática de máquinas con Ansible
Provisión Automática de máquinas con AnsibleProvisión Automática de máquinas con Ansible
Provisión Automática de máquinas con Ansible
 
Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible
 
CRUD básico con Symfony
CRUD básico con SymfonyCRUD básico con Symfony
CRUD básico con Symfony
 
Servidor Web Apache para Linux
Servidor Web Apache para LinuxServidor Web Apache para Linux
Servidor Web Apache para Linux
 
Introducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos WebIntroducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos Web
 
Php
PhpPhp
Php
 
Servidor web apache
Servidor web apache Servidor web apache
Servidor web apache
 
Java swing
Java swingJava swing
Java swing
 
Servidores de aplicaciones para servicios web
Servidores de aplicaciones para servicios webServidores de aplicaciones para servicios web
Servidores de aplicaciones para servicios web
 
Silex para aplicaciones web MVC
Silex para aplicaciones web MVCSilex para aplicaciones web MVC
Silex para aplicaciones web MVC
 
Kohana
KohanaKohana
Kohana
 
Introducción a PHPUnit
Introducción a PHPUnitIntroducción a PHPUnit
Introducción a PHPUnit
 
Significado xampp
Significado xamppSignificado xampp
Significado xampp
 
JSP
JSPJSP
JSP
 
Apache practica
Apache practicaApache practica
Apache practica
 
Servidor web Apache
Servidor web ApacheServidor web Apache
Servidor web Apache
 

Similar a Composer & SemVer

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 pasoshydras_cs
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosaFco Javier Núñez Berrocoso
 
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
 
Aplicaciones web con php y my sql
Aplicaciones web con php y my sqlAplicaciones web con php y my sql
Aplicaciones web con php y my sqlyanetzis
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoSergio Zambrano Delfa
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualizaciónMarcelo Ochoa
 
Instalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuraciónInstalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuraciónSocialBiblio
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Ignacio Muñoz Vicente
 
Desarrollo de sitios web con PHP y MySQL.ppt
Desarrollo de sitios web con PHP y MySQL.pptDesarrollo de sitios web con PHP y MySQL.ppt
Desarrollo de sitios web con PHP y MySQL.pptJorgeAntonio32064
 
PHP Tema 1 - Introducción
PHP Tema 1 - IntroducciónPHP Tema 1 - Introducción
PHP Tema 1 - IntroducciónSpacetoshare
 
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónLuis Ruiz Pavón
 
Servidor Web Apache, PHP, MySQL.
Servidor Web Apache, PHP, MySQL.Servidor Web Apache, PHP, MySQL.
Servidor Web Apache, PHP, MySQL.Ángel Acaymo M. G.
 

Similar a Composer & SemVer (20)

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
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
Docker en el entorno de desarrollo
Docker en el entorno de desarrolloDocker en el entorno de desarrollo
Docker en el entorno de desarrollo
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
 
Tema1
Tema1Tema1
Tema1
 
Aplicaciones web con php y my sql
Aplicaciones web con php y my sqlAplicaciones web con php y my sql
Aplicaciones web con php y my sql
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de uso
 
Composer
ComposerComposer
Composer
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualización
 
Open Build Service
Open Build ServiceOpen Build Service
Open Build Service
 
Instalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuraciónInstalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuración
 
Practica09
Practica09Practica09
Practica09
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2
 
Tema1
Tema1Tema1
Tema1
 
Desarrollo de sitios web con PHP y MySQL.ppt
Desarrollo de sitios web con PHP y MySQL.pptDesarrollo de sitios web con PHP y MySQL.ppt
Desarrollo de sitios web con PHP y MySQL.ppt
 
PHP Tema 1 - Introducción
PHP Tema 1 - IntroducciónPHP Tema 1 - Introducción
PHP Tema 1 - Introducción
 
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
 
Servidor Web Apache, PHP, MySQL.
Servidor Web Apache, PHP, MySQL.Servidor Web Apache, PHP, MySQL.
Servidor Web Apache, PHP, MySQL.
 
Meetup V.E.No.M. y docker
Meetup V.E.No.M. y dockerMeetup V.E.No.M. y docker
Meetup V.E.No.M. y docker
 
Docker 2014 v2
Docker 2014 v2Docker 2014 v2
Docker 2014 v2
 

Composer & SemVer

  • 1. Composer & SemVer Symfony Zaragoza By Alejandro Celaya @acelayaa
  • 2. Evolución de PHP - Proyectos y estándares modernos. http://www.php-fig.org/ - Desarrollo de componentes antes que frameworks.
  • 3. ¿Qué es composer? - Gestor de dependencias para proyectos PHP. https://packagist.org/ - Otros: PEAR, Maven, Gradle, RubyGems, Bundler, npm… - “Composer is strongly inspired by node's npm and ruby's bundler”.
  • 4. ¿Qué resuelve composer? - Gestión de dependencias (de forma recursiva) - Actualización de dependencias - Autoloading propio y de terceros
  • 5. El estándar de Semantic Versioning - SemVer: http://semver.org/ - Version 2.0.0: MAJOR.MINOR.PATCH
  • 6. SemVer aplicado a composer - Muchos proyectos PHP siguen el estándar de SemVer. - Mecanismos para asegurarnos de qué versión vamos a instalar. "vendor/package": "1.2.3" "vendor/package": "2.0.*" "vendor/package": ">=2.0" "vendor/package": "~1.4"
  • 7. Instalar composer - Documentación de la web. curl -sS https://getcomposer.org/installer | php - De forma global. chmod +x composer.phar mv composer.phar /usr/local/bin/composer
  • 8. Configuración de composer { "name": "symfony-zgz/silex-skeleton", "description": "...", "license": "MIT", "type": "project", "require": { "php": ">=5.5", "silex/silex": "~1.0", "silex/web-profiler": "~1.0", "symfony/browser-kit": "~2.3", "symfony/class-loader": "~2.3", // ... "doctrine/orm": "~2.0", "zendframework/zend-stdlib": "~2.3" }, "require-dev": { "phpunit/phpunit": "~4.0", "squizlabs/php_codesniffer": "~1.0" }, "autoload": { "psr-4": { "SymfonyZgz": "src/" } }, "autoload-dev": { "psr-4": { "SymfonyZgzTest": "tests/" } } }
  • 9. Configuración de composer - No hay que memorizar la estructura. composer init
  • 10. Bloques importantes require y require-dev: - Lista de componentes a instalar y su versión
  • 11. Bloques importantes autoload y autoload-dev: - Reglas para cargar clases de forma automática. - Opciones: psr-0, psr-4, classmap y files.
  • 12. Comandos principales - Instalar dependencias por primera vez. composer install - Actualizar dependencias a la última versión válida. composer update - Actualizar el binario de composer. composer self-update - Regenerar el autoloader. composer dump-autoload
  • 13. Otros usos (avanzados) Agregar dependencias - No editar composer.json - Requerir el componente para instalarlo. composer require vendor/package:~1.0 - Instalarlo de forma global. composer global require vendor/package:~1.0
  • 14. Otros usos (avanzados) Optimizar autoloader: - Optimizar el rendimiento del autoloader para producción. composer dump-autoload --optimize - Se generará un classmap en vez de iterar directorios.
  • 15. Otros usos (avanzados) Dependencias de producción: - No instalar los componentes de require-dev. composer update --no-dev - Descargamos el autoloader y reducimos tamaño final. - Con --optimize-autoloader generamos el classmap autoloader en el mismo paso.
  • 16. Otros usos (avanzados) Repositorios privados: - Permiten instalar dependencias de fuentes distintas a packagist. "repositories": [ { "type": "vcs", "url": "https://github.com/acelaya/composer-semver-talk.git" } ]
  • 17. Otros usos (avanzados) Dependencias de PHP: - Indicar que dependemos de una extensión o versión de PHP determinados. "require": { "php": ">=5.5", "ext-intl": "*", "ext-sqlite": "*", // ... },
  • 18. Otros usos (avanzados) CLI scripts: - Scripts del proyecto para ejecutar desde consola. "bin": [ "bin/print-something", "bin/do-something" ]
  • 19. Otros usos (avanzados) Eventos: - Callbacks y comandos que se ejecutan en momentos determinados. "scripts": { "post-package-install": "SymfonyZgzMyClass::postPkgInstall", "post-install-cmd": [ "SymfonyZgzMyClass::postInstall", "phpunit -c app/" ], }
  • 20. Otros usos (avanzados) Instalación de proyectos: - Podemos distribuir proyectos enteros mediante composer. composer create-project vendor/package
  • 21. "require": { "php": ">=5.5.0", "slim/slim": "~2.4", "slim/views": "0.1.*", "slimcontroller/slimcontroller": "~0.4", "apache/log4php": "2.3.*", "doctrine/orm": "2.4.*", "doctrine/doctrine-module": "0.*", "symfony/yaml": "2.*", "symfony/process": "~2.4", "symfony/console": "~2.4", "league/flysystem": "0.5.*", "aws/aws-sdk-php": "~2.5", "zendframework/zend-form": "2.3.*", "zendframework/zend-i18n": "2.3.*", "zendframework/zend-servicemanager": "2.3.*", "zendframework/zend-authentication": "2.3.*", "zendframework/zend-session": "2.3.*", "zendframework/zend-stdlib": "2.3.*", "swiftmailer/swiftmailer": "5.2.*", "endroid/qrcode": "1.2.*", "twig/twig": "1.*", "twig/extensions": "~1.1.0", "dompdf/dompdf": "0.6.*", "cocur/slugify": "~0.11" } Ejemplo
  • 22. Enlaces - Composer: https://getcomposer.org/ - SemVer: http://semver.org/ - Packagist: https://packagist.org/ - PHP-FIG: http://www.php-fig.org/ - Ejemplo: https://github.com/acelaya/composer-semver-talk - SemVer checker: https://github.com/tomzx/php-semver-checker - The PHP League: http://thephpleague.com/