21
Composer Pourquoi ? Comment ? Et plus ... @AFUP_Marseille - 2015-02-26

PHP Composer : Pourquoi ? Comment ? Et plus

Embed Size (px)

Citation preview

Page 1: PHP Composer : Pourquoi ? Comment ? Et plus

ComposerPourquoi ? Comment ? Et plus ...

@AFUP_Marseille - 2015-02-26

Page 2: PHP Composer : Pourquoi ? Comment ? Et plus

Romain Cambien● Co-organisateur AFUP Marseille● Développeur Symfony● Administrateur système● Co-fondateur et

directeur Technique chez Riverline

NOUS RECRUTONS ;)@r_cambien

Page 3: PHP Composer : Pourquoi ? Comment ? Et plus

Gestion des dépendances :

● Manuelle :Télécharger, décompresser, recommencer ...

● PEAR : http://pear.php.net/

● Pas de dépendances par projet● Installation système● Peu de paquets, ajout de paquets compliqués

PEAR : 600 vs Compser : > 50 000

Page 4: PHP Composer : Pourquoi ? Comment ? Et plus

Composer

● Créé fin 2011 par Nils Adermann et Jordi Boggiano

● Deux parties :○ Composer : le client en ligne de commande○ Packagist : le dépôt de paquets par défaut

● Inspiré de NPM et Bundler● Promotion du DRY

Page 5: PHP Composer : Pourquoi ? Comment ? Et plus

Le client en ligne de commande

● Installation :$ curl -sS https://getcomposer.org/installer | php.

Astuce :$ curl -sS http://getcomposer.org/installer | php -- --install-dir=~/bin --filename=composer.

● Mise à jour$ composer self-update.

● Installer les dépendances$ composer install.

Page 6: PHP Composer : Pourquoi ? Comment ? Et plus

Création d’un projet $ composer create-project [package] [path] [version]

● Copie le paquet dans le répertoire cible● Installe les dépendancesExemples avec des frameworks :

Zend :$ composer create-project --stability="dev" \ zendframework/skeleton-application path/to/install

Laravel :$ composer create-project --prefer-dist \ laravel/laravel path/to/install

Symfony :$ composer create-project \ symfony/framework-standard-edition path/to/install

Page 7: PHP Composer : Pourquoi ? Comment ? Et plus

Le fichier composer.json{ "name": "symfony/framework-standard-edition", "license": "MIT", "type": "project", "description": "The \"Symfony Standard Edition\" distribution", "autoload": { "psr-0": { "": "src/" } }, "require": { "php": ">=5.3.3", "symfony/symfony": "2.3.*", "doctrine/orm": "~2.2,>=2.2.3,<2.5", "doctrine/dbal": "<2.5", "doctrine/doctrine-bundle": "~1.2", "twig/extensions": "1.0.*", "symfony/assetic-bundle": "~2.3", "symfony/swiftmailer-bundle": "~2.3", "symfony/monolog-bundle": "~2.4", "sensio/distribution-bundle": "~2.3", "sensio/framework-extra-bundle": "~3.0,>=3.0.2", "sensio/generator-bundle": "~2.3", "incenteev/composer-parameter-handler": "~2.0" }, "scripts": { "post-install-cmd": [ ... ], "post-update-cmd": [ ... ] }, "config": { "bin-dir": "bin" }, "minimum-stability": "stable", “extra”: { ... }}

Nom du projet

Configuration de l’autoloader

Dépendances

Stabilité par défaut

Supérieur à une version

N’importe quelle version 2.3

N'importe quelle version non majeur ( entre 1.2 et 2 )

N’importe quelle version 3 mais supérieure à 3.0.2

Inférieur à une version

“test/test”: “dev-master”

Dernier commit dans le dépôt DEV

Forcer la stabilité : “2.*@dev”

Page 8: PHP Composer : Pourquoi ? Comment ? Et plus

Où trouver les paquets ?

● Packagist.org : le dépôt par défaut$ composer require "monolog/monolog: 1.12.*".

● Git / SVN / Mercurical :{ . "repositories": [ . { . "type": "vcs", . "url": "https://github.com/igorw/monolog" . } . ], . "require": { . "monolog/monolog": "dev-bugfix" . } .} .

● Gestion des tags comme version du paquet● Gestion des archives avec GitHub et BitBucket

Page 9: PHP Composer : Pourquoi ? Comment ? Et plus

Où trouver les paquets ?● Paquet ne supportant pas Composer{ . "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" . }, . "autoload": { . "classmap": ["libs/"] . } . } . } . ], . "require": { . "smarty/smarty": "3.1.*" . } .} .

Même ve

rsion

Page 10: PHP Composer : Pourquoi ? Comment ? Et plus

Où trouver les paquets ?● PEAR { . "repositories": [ . { . "type": "pear", . "url": "http://pear2.php.net" . } . ], . "require": { . "pear-pear2.php.net/PEAR2_Text_Markdown": "*", . "pear-pear2/PEAR2_HTTP_Request": "*" . } .} .

PEAR sans les inco

nvénients de P

EAR !

Page 11: PHP Composer : Pourquoi ? Comment ? Et plus

Le fichier composer.lock

● Généré par composer update● Lu par composer install● Conserver les versions exactes des paquets

Également la référence du commit pour les “dev-master”

● Doit être inclus dans le projet● Ne doit pas être modifié à la main

Page 12: PHP Composer : Pourquoi ? Comment ? Et plus

Autoloader Composer

● Généré lors d’un update ou install● Disponible dans ./vendor/autoload.php● Respecte les règles de chaque paquet

○ PSR-0 : Test\SubTest\TestClass => Test/SubTest/TestClass.php○ PSR-4○ ClassMap : Cherche les classes dans tous les fichiers ○ File : inclus un fichier

● Peut être régénéré par : $ composer dump-autoloadAstuce : --optimize pour compiler tous les chemins d'accès aux classes pour de meilleures performances en PROD

NE PAS UTILISER EN DEV !!

Page 13: PHP Composer : Pourquoi ? Comment ? Et plus

Composer global

● Permet d’installer des outils PHP● S’utilise en rajoutant l’argument global

$ composer global require "squizlabs/php_codesniffer=2.*"$ composer global update$ composer global remove squizlabs/php_codesniffer

● Installe les paquets dans : ~/.composer/vendor/

● Rendre disponible les binaires en ajoutant dans le ~/.profile : PATH=~/.composer/vendor/bin:$PATH

$ phpcs --versionPHP_CodeSniffer version 2.2.0 (stable) by Squiz (http://www.squiz.net)

Page 14: PHP Composer : Pourquoi ? Comment ? Et plus

Création d’un dépôt privé

● Packagist : https://github.com/composer/packagist○ Installation et configuration complexes○ Trop de fonctionnalités ( gestion utilisateurs, etc … )

● Satis : https://github.com/composer/satis○ Packagist allégé○ Reste complexe à configurer et à maintenir

● Toran Proxy : https://toranproxy.com/○ Produit commercial par le créateur de Composer○ Permet de soutenir le développement de Composer○ Installation rapide et peu de configuration

Gratuit pour les développements personne

ls

Page 15: PHP Composer : Pourquoi ? Comment ? Et plus

Installation de Toran

● Télécharger● Décompresser● Renommer et configurer

./app/config/parameters.yml.dist en ./app/config/parameters.yml

● Configurer un vhost sur ./web/Astuce : Tester avec PHP >= 5.4 : ./app/console server:run --env=prod

● Configurer une Crontab pour ./bin/cron● Terminer … ça marche !

Page 16: PHP Composer : Pourquoi ? Comment ? Et plus

Toran Proxy

Packagist.orgProjet

Toran

{ "repositories": [ {"type": "composer", "url": "http://toran.example.com/repo/packagist/"}, {"packagist": false} ]}

{ "repositories": [ {"type": "composer", "url": "http://toran.example.com/repo/private/"}, {"type": "composer", "url": "http://toran.example.com/repo/packagist/"}, {"packagist": false} ]}

GIT / SVN / HG

Page 17: PHP Composer : Pourquoi ? Comment ? Et plus

Interface WEB

Configuration des dépôts privés

Liste des paquets Packagist

Configuration de Toran

Page 18: PHP Composer : Pourquoi ? Comment ? Et plus

Configurer un dépôt privé

Même fonctionnement que pour les dépôts privés dans le composer.json !

Page 19: PHP Composer : Pourquoi ? Comment ? Et plus

Configuration de Toran

Activation du proxy Packagist

Configuration de la cache des archives :● Lazy : Cache à la demande● New tags : Cache toutes les versions plus récentes que

la plus vieille version en cache● All : Cache toutes les versions

Page 20: PHP Composer : Pourquoi ? Comment ? Et plus

Questions ?

Page 21: PHP Composer : Pourquoi ? Comment ? Et plus

Merci !

Rejoignez l’AFUP Marseille !

Twitter : @AFUP_MarseilleMeetup : Marseille-PHP-User-Group