Si vous êtes curieux et que vous jetez un oeil de temps en temps à des fichiers composer.json de différents projets, vous remarquerez qu'ils sont tous structurés différemment. Le paquet "composer-normalize" permet de justement normaliser le contenu d'un composer.json, afin de standardiser son écriture.

Composer est un gestionnaire de dépendances pour PHP. Il permet d'installer facilement des bibliothèques dont un projet a besoin.

Le fichier composer.json décrit justement toutes les dépendances nécessaires au projet, les contraintes de version, et bien d'autres choses.

Lorsque l'on écrit ou génère un fichier composer.json, les éléments qu'il contient peuvent être positionnés différemment. Ces éléments sont décrits dans un schéma précis.

Composer fourni une option (--sort-packages) permettant d'ordonner la liste des paquets du projet. Cependant, cela ne correspondait pas au souhait du concepteur de composer-normalize, qui veut obtenir un fichier composer.json complètement ordonné.

Concrètement, composer-normalize :

  • ordonne les éléments en suivant le schéma de Composer
  • tri par valeur les entrées dans la section "bin"
  • tri par clé les entrées dans les sections "config", "extra", et "scripts-descriptions"

Pour installer composer-normalize, cela fonctionne comme un paquet Composer classique.

Soit vous l'installez dans votre projet :

composer require --dev ergebnis/composer-normalize

Ou alors de manière globale sur votre machine :

composer global require ergebnis/composer-normalize

Pour normaliser votre fichier composer.json, lancez simplement cette commande, en étant positionné dans le dossier où se trouve le fichier json :

composer normalize

La commande autorise de spécifier l'emplacement du composer.json :

composer normalize ~/chemin/vers/le/composer.json

Quelques options sont disponibles :

  • --dry-run : permet de montrer le futur composer.json sans modifier le fichier
  • --indent-size : permet de spécifier une taille pour l'indentation
  • --indent-style : défini le type d'indentation ("space" ou "tab")
  • --no-update-lock : permet de ne pas mettre à jour le fichier composer.lock si existant

Après exécution de la commande, voici le résultat (à gauche le fichier d'origine, à droite, le fichier normalisé) :

Les entrées sont bien ordonnées selon le schéma Composer.