gestion des dépendances dans un projet php - forum php 2012
Post on 28-Nov-2014
4.221 Views
Preview:
DESCRIPTION
TRANSCRIPT
1
La gestion des dépendancesdans un projet PHP
Forum PHP 2012
Passionné de web depuis 1996, de PHP depuis 2000 et de musique depuis 1977
Jean-Marc Fontaine
‣ Consultant PHP chez Alter Way‣ Ex-Président de l’AFUP‣ Co-Auteur du livre blanc
«Industrialisation PHP»‣ Auteur du blog
industrialisation-php.com
2
3
La gestion des dépendancesdans un projet PHP
4
Gestion manuelle
5
Copie manuelle des dépendancesSimple à mettre en œuvre
6
Garantit la disponibilitéPas de risque de voir disparaître la dépendance
7
Impact sur le dépôt de codeTaille plus importante, sauvegardes plus longues
8
Mises à jour parfois difficilesSubversion avant la version 1.7 complique la mise à jour
9
10
Paquets du système d’exploitation
11
Lié au système d’exploitation«deb» pour la famille Debian,«rpm» pour famille Red Hat
12
Simple à utiliserDebian : apt-get install phpmyadminRed Hat : yum install phpmyadmin
13
Partagé par tout le systèmeUne seule version installée à la fois
14
Peu de paquets PHP disponiblesSeules les librairies les plus connues sont disponibles
Comparaison de versionsVersions souvent anciennes
15
Officiel Debian 6
CakePHP
Doctrine
phpMyAdmin
PHPUnit
2.1.13 1.3.2 (10/11)
2.2.2 1.2.2 (01/09)
3.5.1 3.3.7 (09/10)
3.6.11 3.4.14 (06/10)
16
Possibilité de créer ses propres paquetsPas infaisable mais pas trivial
17
Dépôt de code
18
svn:externals avec SubversionSimple à mettre en œuvre mais réservé aux répertoires
19
20
Sous-modules GitUn peu ardu à mettre en œuvre
21
22
23
Archives PHAR** Attention : un jeu de mot hasardeux s’est glissé dans cette vignette. Sauras-tu le retrouver ?
24
Simplicité d’emploiCopier l’archive suffit à installer ou mettre à jour
25
Simplicité de déploiementUn seul fichier à gérer. Possibilité de le compresser.
26
Projet completImpossible de ne prendre qu’une partie d’un projet
27
Peu de projet distribués sous ce formatatoum, Composer, Clinner, Goutte, Hoa, PHP Coding Standard Fixer, Symfttpd, etc.
28
La configuration par défaut de PHP pose parfois des problèmes
29
PEAR
30
EprouvéLe projet existe depuis plus de 10 ans
31
Qualité inégaleMalgré les règles pour assurer une qualité homogène, le bon côtoie le très (très) moyen
32
Peu attractifPeu de librairies majeures choisissent d’être disponibles dans PEAR
33
VieillissantDe plus en plus de paquets ne sont plus maintenus
34
Un installeur indépendant et bien vivantOn peut diffuser ses librairies via un canal PEAR personnalisé
35
36
Création d’un paquet assez simple
package.xml
37
<?xml version="1.0" encoding="UTF-8"?><package packagerversion="1.4.10" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0"…> <name>PHPUnit</name> <channel>pear.phpunit.de</channel> <summary>The PHP Unit Testing framework.</summary> <description>The PHP Unit Testing framework.</description> <lead> <name>Sebastian Bergmann</name> <user>sb</user> <email>sebastian@phpunit.de</email> <active>yes</active> </lead> <date>2012-05-31</date> <version> <release>3.6.11</release> <api>3.6.0</api> </version> <stability> <release>stable</release> <api>stable</api> </stability>
38
Génération semi-automatiquePEAR_PackageFileManager2 peut générer le fichier package.xml
39
Création d’un canal personnalisé facile avec Pirum
40
Composer
41
Projet récent et très actifInitié en avril 2011, environ 1 900 commits
42
Composer, Packagist & SatisTrois outils complémentaires
43
ComposerUn gestionnaire de paquets en ligne de commande
44
Installation simplecurl -s http://getcomposer.org/installer | php
45
Simplicité d’utilisationphp composer.phar install
46
Dépendances par projetPas d’effet de bord
47
vendor/ autoload.php composer/ symfony/ browser-kit/ class-loader/ css-selector/ dom-crawler/ event-dispatcher/ finder/ http-foundation/ http-kernel/ routing/ twig/ twig/
48
Simplicité de diffusion
composer.json
49
{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}
composer.json
50
{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}
composer.json
51
{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}
composer.json
52
{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*" }, "autoload": { "psr-0": { "Soko": "src/" } }}
53
Possibilité de lancer des actions après l’installation des dépendancesVidage de cache, création de fichiers, etc.
54
Chargement automatiqueCompatible PSR-0
Chargement automatique
55
"autoload": { "psr-0": { "Vendor\\Namespace": "lib/" }, "classmap": ["src/", "classMap.php"]},"include-path": ["src/", ""]
require __DIR__ . '/vendor/autoload.php';
Chargement automatique
56
"autoload": { "psr-0": { "Vendor\\Namespace": "lib/" }, "classmap": ["src/", "classMap.php"]},"include-path": ["src/", ""]
require __DIR__ . '/vendor/autoload.php';
57
Création d’un projet à partir d’un modèlephp composer.phar create-project jmfontaine/application mon-projet
58
PackagistUn annuaire de paquets bien fourni
59
Quelques chiffresPackagist
60
0
1000
2000
3000
4000
09/2011 10/2011 11/2011 12/2011 01/2012 02/2012 03/2012 04/2012 05/2012
625 658 752 8601 154
1 423
1 791
2 375
3 863
7 48 140 207352 484
7011 015
1 472
Source: http://packagist.org/statistics
PaquetsVersions
61
Une adoption croissanteDe plus en plus de librairies en vue l’utilise
62
Des sources variéesVCS (Subversion, Git, Mercurial), archives
63
SatisUn Packagist léger pour vos paquets privés
64
{ "name": "Jean-Marc Fontaine packages", "homepage": "http://satis.jmfontaine.net/", "repositories": [ { "type": "git", "url": "ssh://git.jmfontaine.net/srv/git/repositories/aviso.git" }, { "type": "git", "url": "ssh://git.jmfontaine.net/srv/git/repositories/soko.git" }, { "type": "git", "url": "ssh://git.jmfontaine.net/srv/git/repositories/modele-application.git" }, ], "require-all": true}
65
{ "name": "Soko", "description": "Light continuous integration tool", "license": "BSD-3-Clause", "authors": [ { "name": "Jean-Marc Fontaine", "email": "jm@jmfontaine.net", "homepage": "http://jmfontaine.net/" } ], "require": { "php": ">=5.3.0", "symfony/console": "2.0.*", "symfony/finder": "2.0.*", "symfony/process": "2.0.*", "symfony/yaml": "2.0.*", "jmfontaine/aviso": "0.1.0" }, "autoload": { "psr-0": { "Soko": "src/" } }}
66
Création d’un projet à partir d’un modèle hébergé avec Satisphp composer.phar create-project jmfontaine/modele-application mon-projet --repository-url=http://satis.jmfontaine.net
67
Version stable en vueAlpha 3 disponible, beta en juin,version stablepour la fin de l’été
68
Merci !
‣ Commentaires et slides : https://joind.in/6458‣ Blog : http://www.industrialisation-php.com/‣ Twitter : @jmfontaine / @indusphp‣ Email : jean-marc.fontaine@alterway.fr
Les photos et illustrations suivantes ont été utilisées dans cette présentation. Merci à leurs auteurs !
69
Crédits photographiques
‣ https://secure.flickr.com/photos/cglosli/3296946161/
‣ http://www.vivelesrondes.com/oarystis/22836/
‣ https://secure.flickr.com/photos/library_of_congress/2163511028/
‣ https://secure.flickr.com/photos/halfbisqued/2353845688/
‣ https://secure.flickr.com/photos/advertisingelyse/3709966085/
‣ https://secure.flickr.com/photos/olibac/1823957148/
‣ https://secure.flickr.com/photos/reebob/3868826366/
‣ https://secure.flickr.com/photos/12287146@N04/4931171160/
top related