Composer: Standardisierte composer.json’s einfach überall

Zwei Tipps um den Standard in composerbasierten Packages herzustellen und zu halten.

Standards helfen uns bei wiederkehrenden Dingen.

Zum Beispiel eine standardisierte Definition fördert dank der gleichen Struktur eine bessere Lesbarkeit resultiert in freundlicher Wartung.

Die composer.json ist eins dieser wiederkehrenden Definitionen.

Hier sind zwei Tipps um den Standard in composerbasierten Packages herzustellen und zu halten.

TL;DR

  • Config sort-packages: true
"config": {
    "sort-packages": true
},
composer global require ergebnis/composer-normalize

Config: sort-packages

Der Standard für Composer ist das Packages nicht sortiert werden.

Das mag bei ein oder zwei Abhängigkeiten kein Problem sein. Bei mehreren wird es schnell unüberschaubar.

Nehmen wir mal folgendes Beispiel:

"require": {
    "symfony/polyfill-php80": "^1.15",
    "psr/log": "~1.0",
    "php": ">=7.2.5",
    "webmozart/assert": "~1.9.1",
    "doctrine/event-manager": "~1.0",
    "symfony/polyfill-php73": "^1.11"
}

Super chaotisch. Und ich rede nicht vom freundlichen Chaos. Das hier… ist einfach nur hart zu lesen.

Alternativ sortieren wir mal.

Via Sublime, indem wir [CTRL] + [Shift] + P -> Sort lines auswählen.

Oder in PHPStorm durch[CTRL] + [Shift] + P -> Sort lines auswähen.

Nun ziehen wir noch php zum Anfang. Und bam, siehe da:

"require": {
    "php": ">=7.2.5",
    "doctrine/event-manager": "~1.0",
    "psr/log": "~1.0",
    "symfony/polyfill-php73": "^1.11",
    "symfony/polyfill-php80": "^1.15",
    "webmozart/assert": "~1.9"
}

Schon besser.

Systemabhängigkeiten (php oder php-*) bieten sich an herauszustechen. Das hat den Vorteil das System und Software relevante Abhängigkeiten auf einen Blick erkennbar sind.

Um den Aufwand bei neuen Package Installationen gering zu halten, liefert composer require das Argument --sort-packages.

composer require vendor/example --sort-packages

Das ist super. Hat leider den Nachteil, das man sich an Dinge erinnern muss.

Alternativ lässt Composer eine Konfig zu: sort-packages.

Damit überschreiben wir den Standard.

"require": {
    [...]
},
"config": {
    [...]
    "sort-packages": true
},

Composer Normalize

Die composer.json besteht in der Regel aus weiteren Dingen, neben Abhängigkeiten.

Name, Autoren, Lizenz, Plattform, Konflikte, Support und das beschreibt nicht mal Ansatzweise die Hälfte von Möglichkeiten.

Von Möglichkeiten die in jeder composer.json anders strutkturiert sein können.

Händisch composer.json auf eine Struktur bringen und halten, lässt sich als fehleranfällige Mühen bezeichnen.

Zu unserem Glück, existiert das Package composer-normalize.

Ein Befehl und BAM composer.json ist auf einem Standard strukturiert.

Da composer-normalize in den seltensten Fällen eine Projektabhängigkeit ist, empfiehlt sich eine globale Installation.

composer global require ergebnis/composer-normalize

Sobald das Package installiert, kann es los gehen:

composer normalize

Kudos

  • Thanks to all composer maintainers. You guys rock!
  • Thanks to localheinz@github and all contributors on composer-normalize.

Schreibe einen Kommentar