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