WCEU : Better Site Stacks with Composer

wceu-composer2

Cet article est la suite de ma retranscription des conférences du WordCamp Europe 2013. Cette fois encore elle fait partie des conférences LEARN, elle s’intitule Better Site Stacks with Composer et elle a été présentée par Andrey Savchenko ou @Rarst.

Vous pouvez retrouver sa conférence sur WordPress TV.

Que nous dit notre orateur ?

Tout d’abord il nous explique ce qu’est un dependency manager ( ou gestionnaire de dépendances ). En gros c’est un moyen de déclarer que notre code dépend d’une libraire ou d’un autre code. Les développeurs créent du code, beaucoup de code mais ils ne savent pas, réellement, si au moment de déployer leur code il va fonctionner, justement a cause de ces dépendances.

Si chaque plugin commence par inclure sa propre librairie, dans sa propre version on va avoir des conflits. Une librairie incluse plusieurs fois dans PHP va déclencher une erreur fatale et le site sera planté.

Pour répondre a ce genre de problématiques il y a le PHP5.3 avec le namespacing qui permet d’avoir moins de problèmes de collision de nom de classe.

Le standard PSR-0 permet de généraliser le autoloading de classes,. Si jamais on appelle une classe qui n’existe pas, en dernier recours on peut mettre en place une fonction qui va tenter de charger la classe correspondante avant que le code ne plante complètement. Ce standard permet d’uniformiser l’arborescence des fichiers, mais je vous invite à consulter le site.

Une solution ?

Pour l’orateur ces solutions ne sont pas complètes, ce n’est pas automatisé, il faut gérer les dépendances soit même, on en sait pas vraiment si les libraires ou plugins sont présents, s’ils sont à la bonne version etc.

La solution serait donc d’utiliser Composer. Composer va se nourrir de différentes sources pour télécharger ses dépendances :

  • Téléchargement direct
  • SVN : un gestionnaire de versions
  • GIT : un gestionnaire de version aussi
  • Mercurial : encoreu n gestionnaire de versions
  • Pear (packages) etc.

Pour déclarer là où l’on peut trouver les éléments à télécharger, on déclare un fichier packages.json. Pour pouvoir trouver les sources, on peut aller sur https://packagist.org/ qui va nous donner des

Le fichier composer.json lui va déclarer ce que le projet à besoin, c’est à dire ses dépendances, la version de la dépendance etc. Ce qui est intéressant c’est que l’on peut dire que notre projet dépend d’une version d’un package mais surtout la possibilité de dire que l’on a besoin de n’importe quelle version du package dans la version 1.*. C’est un peu comme quand dans un plugin on dit qu’il a besoin d’au moins la version 3.0 de WordPress pour fonctionner.

Donc si un plugin demande la version 1.5 alors composer va prendre la version 1.5 comme on a spécifié que l’on a besoin de n’importe quelle version de la 1.x.

Et WordPress ?

Dans WordPress ce n’est pas actuellement en place cependant les challenges sont :

  • Amener ça au niveau du core WordPress
  • Avoir un accès au repository de WordPress et ainsi faciliter la mise en place des sites
  • Gérer les assets de façon facile

N’oublions pas que composer n’est pas dédié à PHP, on peut l’appliquer aussi au CSS ou au javascript. C’est un peu comme ce que l’on peut rencontrer avec d’autres gestionnaires comme dans nodejs et npm (node package manager ) ou Bower. On déclare les dépendances et tout se télécharge dans des dossiers spécifiés.

Conclusion

Cette technique permet de solidifier nos sites, gérer automatiquement ce genre de choses rend les mises à jour ou les installations plus simples et moins stressants. Est-ce que nous n’allons pas oublier un fichier ? La dépendance est-elle en place ? Le module ne manque-t-il pas ?

Il ne faut pas seulement appeler ses site des webapps mais il faut faire en sorte que se soit vraiment une webapp.

L’image de la fin :

wceu-composer

Share on Google+0Tweet about this on Twitter3Share on Facebook0Pin on Pinterest0

3 commentaires

Add Comment Register



Rejoignez la discussion

Vous pouvez utiliser ces HTML balises et attributs: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>