composer & semver

22
Composer & SemVer Symfony Zaragoza By Alejandro Celaya @acelayaa

Upload: alejandro-celaya-alastrue

Post on 18-Jul-2015

333 views

Category:

Software


0 download

TRANSCRIPT

Composer & SemVerSymfony 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": {

"SymfonyZgz\\Test\\": "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": "SymfonyZgz\\MyClass::postPkgInstall",

"post-install-cmd": [

"SymfonyZgz\\MyClass::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/