composer & semver
TRANSCRIPT
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/"
}
}
}
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/