Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Composer

936 Aufrufe

Veröffentlicht am

These are the slides of the talk I gave at Trovit on October 2013. It covers from Composer Basics to some more advanced tips and tricks.

Veröffentlicht in: Technologie
  • Buenas Adán, lo primero gracias por la presentación.
    Utilizo composer desde hace muy poco..
    Las ideas básicas creo que las tengo claras, pero tengo un problema con mi primera app al subirla al entorno de producción.
    De leer tu presentación me surge una duda.
    Es necesario ejecutar algun script de composer antes de subir la app al entorno de produccion? o añadir al composer.json algun atributo?
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

Composer

  1. 1. Composer Dependency management for PHP
  2. 2. 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
  3. 3. Agenda •  Composer Basics •  Mastering Composer •  Bottlenecks •  Enlaces de interés •  ¿Preguntas? 3
  4. 4. Composer Basics
  5. 5. ¿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
  6. 6. ¿Es un concepto nuevo? •  En python existe pip •  En javascript existe npm •  En ruby existe bundler •  En php existe… ¿ PEAR / Pyrus ? 6
  7. 7. 7
  8. 8. ¿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
  9. 9. Instalación
  10. 10. Instalación curl -S http://getcomposer.org/installer | php 10
  11. 11. 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
  12. 12. Instalación 01. $ sudo mv composer.phar /usr/local/bin/composer 02. $ sudo chmod +x /usr/local/bin 03. $ sudo composer self-update 12
  13. 13. Primeros pasos
  14. 14. Instalando dependencias $ composer require twig/twig 14 "1.*"
  15. 15. Instalando dependencias 2.0.1 15
  16. 16. Instalando dependencias 2.0.* 16
  17. 17. Instalando dependencias >=2.1,<3.0 17
  18. 18. Instalando dependencias ~2.1 18
  19. 19. 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
  20. 20. composer.json 01. { 02. "require": { 03. 04. "twig/twig" : "1.*" } 05. } 20
  21. 21. 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
  22. 22. Autoloading 01. <?php 02. require_once __DIR__.'/vendor/autoload.php'; 03. 04. 05. 06. 07. // Your code 22
  23. 23. 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
  24. 24. Repositorios
  25. 25. 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
  26. 26. VCS: git, svn, hg… { "repositories": [ { "type": "vcs", "url": "https://github.com/symfony/Yaml" } ], "require": { "symfony/yaml": "2.3.*" } } 26
  27. 27. PEAR { "repositories": [ { "type": "pear", "url": "http://pear2.php.net" } ], "require": { "pear-pear2.php.net/PEAR2_Text_Markdown": "*", "pear-pear2/PEAR2_HTTP_Request": "*" } } 27
  28. 28. 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 }
  29. 29. Creando un paquete
  30. 30. 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
  31. 31. Creando un paquete: Autoloading 01. "autoload": { 02. "psr-0": { 03. 04. "TrovitFoo": "src/" } 05. } 31
  32. 32. Creando un paquete: Autoloading 01. "autoload": { 02. "psr-0": { 03. 04. "Trovit_": "src/" } 05. } 32
  33. 33. Creando un paquete: Autoloading 01. "autoload": { 02. "classmap": ["src/", "lib/"] 03. } 33
  34. 34. Creando un paquete: Autoloading 01. "autoload": { 02. "files": ["src/Trovit/functions.php"] 03. } 34
  35. 35. Scripts
  36. 36. 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
  37. 37. Scripts { "scripts": { "post-install-cmd": [ "MyNamescapeScriptHandler::buildBootstrap" ], "post-update-cmd": [ "rm -rf app/cache/*" ] } } 37
  38. 38. Instaladores
  39. 39. Instaladores oficiales •  Wordpress •  Drupal •  CakePHP •  CodeIgniter •  Laravel •  ¡Y muchos más! http://github.com/composer/installers 39
  40. 40. Instaladores propios http://getcomposer.org/doc/articles/custom-installers.md 40
  41. 41. Mastering Composer
  42. 42. Semantic versioning X.Y.Z http://semver.org/spec/v2.0.0.html 42
  43. 43. Branch aliases 01. "extra": { 02. "branch-alias": { 03. 04. "dev-master": "1.0.x-dev" } 05. } 43
  44. 44. Trabajando con forks { "repositories": [ { "type": "vcs", "url": "https://github.com/adanlobato/Yaml" } ], "require": { "symfony/yaml": "dev-hotfix" } } 44
  45. 45. Trabajando con forks { "repositories": [ { "type": "vcs", "url": "https://github.com/adanlobato/Yaml" } ], "require": { "symfony/yaml": "dev-hotfix as 1.0.x-dev" } } 45
  46. 46. Minimum stability { "minimum-stability": "stable", "require": { "symfony/config": "2.3", "symfony/yaml": "2.3.*@dev", "symfony/console": "2.3.*@beta" } } 46
  47. 47. Autoloading optimizado $ composer dump-autoload --optimize 47
  48. 48. Repositorios privados: Satis •  Es una versión reducida de Packagist •  Se instala y se configura muy rápido •  Es ideal para repositorios privados 48
  49. 49. Repositorios privados: Satis $ composer create-project composer/satis 49
  50. 50. 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
  51. 51. Repositorios privados: Satis $ php bin/satis build config.json web/ 51
  52. 52. Repositorios privados: Satis Para protegerlo del exterior: •  Basic HTTP Authentication •  SSH •  Red privada 52
  53. 53. Repositorios privados: Packagist •  Packagist es Open Source •  Puedes instalarte tu propio packagist •  Soporta Github Webhooks 53
  54. 54. Bottlenecks
  55. 55. Bottlenecks •  Dependency Solver •  Github •  Github post-receive hooks •  Repositorios privados 55
  56. 56. Enlaces de interés •  getcomposer.org •  packagist.org •  github.com/composer 56
  57. 57. ¿Preguntas?

×