Introduire Composer et son autoloader dans SPIP
Il faut bien commencer par quelque chose alors allons y.
Pour introduire Composer il va falloir
A) un composer.json (ça va)
B) exécuter composer install
ou composer update
C) charger l’autoloader
D) ajouter des dépendances utiles
Ce qui change particulièrement donc est la phase de composer install.
A) composer.json
Bon, on a déjà un début de composer.json, c’est facile.
On le modifie au minimum dans un premier temps pour charger un répertoire ecrire/src dans l’autoloader composer.
Note que le composer.json est agencé avec composer normalize
fournit par https://github.com/ergebnis/composer-normalize
Installable par exemple globalement comme cela
composer global require ergebnis/composer-normalize
B) composer install
Ça peut être fait à la main.
Mais l’idée (potentielle) serait aussi que les outils checkout
et spip-cli
(et l’archiveur évidemment) se chargent sur leurs méthodes d’installation de SPIP d’exécuter composer install
(en mode dev par défaut), et qu’une option --no-dev
leur permettre de ne pas charger les scripts de dev.
Ce faisant ça se comporte comme Composer lui même pour cette option.
Note: dans un avenir bien plus lointain seul Composer serait utilisé pour télécharger / installer SPIP probablement. (en dehors du zip)
C) charger l’autoloader dans SPIP
Il faut le charger le plus tôt possible sur les points d’entrée de SPIP.
J’en vois 3 a priori actuellement
- spip.php
- ecrire/index.php
- ecrire/inc_version.php (en chargeant SPIP en CLI)
On leur ajoute le require à vendor/autoload.php
.
C’est bien tant que les gens ont bien fait B). Sinon ça fait page blanche !
D) dépendances… starter kit…
Pour débuter doucement je propose qu’on charge les polyfill php 8.0 et 8.1 de symfony qui (un peu comme on avait à une époque avec array_column) fournissent et déclarent globalement certaines des fonctions apparues dans ces PHP respectifs, comme par exemple str_contains
ou str_starts_with
.
Je propose également qu’on charge le polyfill mbstring pour si l’extension mbstring n’est pas présente sur l’hébergement (oué, ça craint dans ce cas), mais le fait d’être sûr que les fonctions mb_* sont disponibles simplifie le code.
L’autre possibilité serait d’indiquer que l’extension mb-string
est obligatoire pour SPIP. Moins tolérant, mais efficace aussi ! D’autant qu’il ne doit pas y avoir beaucoup d’hébergements qui ne fournissent pas mb-string.