Introduire Composer et son autoloader dans SPIP #5056

Open
opened 9 months ago by marcimat · 3 comments
Owner

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.

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](https://github.com/symfony/polyfill-php80) et [8.1](https://github.com/symfony/polyfill-php81) 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](https://github.com/symfony/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.
marcimat added this to the 4.2 milestone 9 months ago
marcimat added the
amélioration
label 9 months ago

vive composer, et vive mbstring par défaut !

vive composer, et vive mbstring par défaut !

Pour "C) charger l’autoloader dans SPIP" mais aussi "D) dépendances… starter kit…" ya donc #5057

Et pour "B) exécuter composer install ou composer update" (alinea « 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 ») ya spip-contrib-outils/checkout#6 pour checkout

Pour "C) charger l’autoloader dans SPIP" mais aussi "D) dépendances… starter kit…" ya donc https://git.spip.net/spip/spip/pulls/5057 Et pour "B) exécuter composer install ou composer update" (alinea « 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 ») ya https://git.spip.net/spip-contrib-outils/checkout/pulls/6 pour `checkout`
Poster
Owner

Bon, le temps passe et on n’a pas osé encore envoyer la PR #5057 dans SPIP 4.x ... en l’occurrence SPIP 4.2…

Peut être qu’il faut réserver cela pour un SPIP 5, un poil plus radical, qui serait PHP >= 8.0 (voire 8.1 pour avoir la fonctionnalité Enum) ?

Je dis cela comme ça vient, mais en même temps j’ai l’impression qu’on manque d’énergie pour avancer.

Bon, le temps passe et on n’a pas osé encore envoyer la PR #5057 dans SPIP 4.x ... en l’occurrence SPIP 4.2… Peut être qu’il faut réserver cela pour un SPIP 5, un poil plus radical, qui serait PHP >= 8.0 (voire 8.1 pour avoir la fonctionnalité Enum) ? Je dis cela comme ça vient, mais en même temps j’ai l’impression qu’on manque d’énergie pour avancer.
Sign in to join this conversation.
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.