Slide 1

Slide 1 text

COMPOSER, LE CERCLE VERTUEUX DES DÉPENDANCES AFUP Lyon / 23 mars 2016

Slide 2

Slide 2 text

QUI SUIS-JE ? CONSULTANT TECHNIQUE WEB Développements spéci ques, création de site, constitution d'équipes, accompagnement, méthodes agiles...     https://chstudio.fr @s_hulard http://github.com/shulard [email protected]

Slide 3

Slide 3 text

LES 10 PROCHAINES MINUTES... 1. Composer ? 2. L'option --prefer-lowest 3. Cas réel avec HttpPlug

Slide 4

Slide 4 text

COMPOSER ?

Slide 5

Slide 5 text

QU'EST-CE QUE C'EST ? Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you. getcomposer.org

Slide 6

Slide 6 text

LA GESTION DE DÉPENDANCES Déclarer les librairies utilisées dans votre projet Trouver et installer les versions compatibles par rapport à l'environnement { "name": "symfony/framework-standard-edition", "require": { "php": ">=5.3.9", "symfony/console": "2.8.*", "symfony/yaml": "2.8.*" }, "require-dev": { "phpunit/phpunit": "5.0" } }

Slide 7

Slide 7 text

ASSURER LA COMPATIBILITÉ Différents environnements, différentes contraintes : Versions de PHP Extensions (xml, json, regex...) Versions patch, mineure, majeure Cassures de compatibilités (BC break) Garantie de fonctionnement de l'API publique Semantic Versioning

Slide 8

Slide 8 text

L'OPTION `--PREFER-LOWEST`

Slide 9

Slide 9 text

QU'EST-CE QUE C'EST ? Prefer lowest versions of dependencies. Useful for testing minimal versions of requirements, generally used with --prefer-stable. getcomposer.org Pour l'histoire : Introduit par le CTO de pour . Nicolas Grekas Black re.io aider à abiliser les tests sur Symfony

Slide 10

Slide 10 text

POURQUOI ? Tester la compatibilité du code avec la version la plus ancienne Garantir que le contexte d'exécution est stable

Slide 11

Slide 11 text

COMMENT ? Créer des conditions de test spéci ques  Penser à la version de PHP Exemple avec un build : Travis CI matrix: include: - php: 5.4 env: COMPOSER_FLAGS="--prefer-stable --prefer-lowest" install: - travis_retry composer update ${COMPOSER_FLAGS} --no-interaction script: - composer test

Slide 12

Slide 12 text

QUAND ? Fiabiliser la diffusion d'une librairie Grande variété de contexte d'utilisation S'assurer que le composer.json ne ment pas

Slide 13

Slide 13 text

CAS RÉEL AVEC HTTPPLUG HTTPS://GITHUB.COM/PHP-HTTP/REACT-ADAPTER

Slide 14

Slide 14 text

CRÉATION D'UN ADAPTER 1. Ajout de la dépendance: react/http-client: 0.4.* 2. Développement de l'adapter \o/

Slide 15

Slide 15 text

SAUF QUE... En testant avec --prefer-lowest : PHP Fatal error: Class 'React\Dns\Resolver\Factory' not found in /home/travis/build/php-http/react-adapter/src/ReactFactory.php on line 37 Le projet React ne respecte pas les règles de Semantic Versionning, l'API publique a changé sur des versions PATCH. Mon chier composer.json ment...

Slide 16

Slide 16 text

PROBLÈME / SOLUTION Personne ne doit pouvoir importer l'adapter sur une version de React incompatible. Il faut adapter les dépendances en conséquence. { "name": "php-http/react-adapter", "require": { "php": ">=5.4", ... "react/http-client": "^0.4.8", "react/dns": "^0.4.1", "react/stream": "^0.4.3" } }

Slide 17

Slide 17 text

QUESTIONS ? http://shulard.github.io/talks/afup-lyon-lighting-mars-2016