Wir alle nutzen den PHP Code Style Fixer. Wir lieben ihn alle! Aber wir mögen es nicht, jedes Mal den „composer fix“-Button zu klicken, bevor wir unsere Änderungen pushen. Ich verspreche, Sie werden das Lefthook-Utility lieben, weil es eine der häufigsten Aktionen in PHP-Projekten automatisiert.
Früher oder später wird jeder Entwickler in seinem Leben die Freude an automatischen Code-Fixing-Tools kennenlernen. Dies spart uns Zeit und verbessert die Qualität des Codes. Allerdings steht jeder Entwickler im Laufe der Zeit vor dem Problem, solche Prozesse zu automatisieren. Wir mögen es nicht, Code-Fixer-Workflows manuell auszulösen und dabei unsere Zeit zu verschwenden und uns auf so grundlegende Dinge zu konzentrieren.
Ich habe verschiedene Tools ausprobiert. Von direkten Commits im Verzeichnis .git/hooks
bis hin zu Husky. Ich suchte nach einer perfekten Lösung für die Automatisierung von Code-Fixes in meinen Projekten. Eines der beliebtesten Tools für solche Zwecke ist Husky.
Komplexe Einrichtung. Die Konfiguration von Husky erfordert zu viele Schritte und verfügt nicht über umfangreiche Funktionen, um die Konfiguration zu vereinfachen.
Node.js-Umgebung. Ein so einfaches Tool erfordert die Installation von NodeJS. Dies verursacht einen Performance-Overhead während der Installation und Nutzung.
Abhängigkeitsmanagement. Um Husky zu installieren, benötigen Sie einen Paketmanager wie NPM, PNPM oder Bun. Jeder von ihnen belastet Ihr System mit unnötigen Komponenten und macht die Tool-Einrichtung komplexer.
Beim Durchstöbern der GitHub-Repository-Liste entdeckte ich das ultimative Entwickler-Tool namens Lefthook. Warum hat es mir gefallen?
Verwendung einer kompilierten Sprache
Hervorragende Leistung
Keine Paketmanager oder Laufzeitumgebung erforderlich
Kann problemlos in jede Umgebung integriert werden
Wird als einzelne Binärdatei geliefert
YAML-Syntax für Konfigurationsdateien. YAML ist ein bekanntes Markup für Konfigurationsdateien in CI-Workflows für die meisten Projekte, zum Beispiel GitHub Actions. Es wird in den meisten Open-Source-Projekten verwendet.
Die meiste Einrichtung kann mit integrierten Tools konfiguriert werden. Lefthook verfügt über einen umfangreichen Satz von Konfigurationsoptionen. Es ist nicht erforderlich, Git-Interna zu kennen, um grundlegende Aufgaben wie automatisches Code-Fixing oder Code-Linting zu konfigurieren.
Gute Unterstützung für Monorepos
Zu viel Einführung für eine so kurze Aktion. Zum Zeitpunkt des Schreibens dieses Artikels ist die neueste Version von Lefthook 1.6.4. Gehen wir Schritt für Schritt vor.
Installieren und konfigurieren Sie den PHP Code Style Fixer wie in deren Readme beschrieben.
Installieren Sie Lefthook auf eine beliebige Weise aus der Installationsanleitung. Auf macOS verwende ich den Paketmanager brew: brew install lefthook
.
Erstellen Sie eine Konfigurationsdatei namens lefthook.yml
im Stammverzeichnis Ihres Projekts. Achtung! Sie sollte sich im Stammverzeichnis des Git-Repositories befinden, auch wenn Sie ein Monorepo verwenden.
Fügen Sie den folgenden Inhalt in die Datei lefthook.yml
ein.
pre-commit:
commands:
web-cs-fixer:
tags: style fixer
glob: "*.php"
stage_fixed: true
run: vendor/bin/php-cs-fixer --config=.php-cs-fixer.dist.php --allow-risky=yes fix {staged_files}
Führen Sie den Befehl lefthook install
aus, um die Änderungen anzuwenden. Achtung! Lefthook verwendet Git-Hooks im Hintergrund, daher sollten Sie nach jeder Aktualisierung der Konfigurationsdatei erneut lefthook install
ausführen.
Das ist alles. Viel Spaß beim Programmieren!
Die {staged_files}
-Vorlage ist eine eingebaute Variable, die die Liste der geänderten Dateien bereitstellt.
Die Eigenschaft glob
wird verwendet, um die Dateien zu filtern, auf die Sie den Befehl ausführen möchten.
*.php
bedeutet, dass PHP CS Fixer nur auf PHP-Dateien ausgeführt wird, um Konflikte mit anderen Dateierweiterungen zu vermeiden.stage_fixed
ist mein Lieblingsteil. Es kümmert sich darum, die geänderten Dateien wieder zu Git hinzuzufügen (kein Bedarf, den Befehl git add
auszuführen).
run
enthält den Befehl, den Sie vor jedem Commit ausführen möchten.
In einem meiner Projekte verwende ich ein Docker-Monorepo-Design. Einer der Container ist eine PHP-Symfony-Anwendung. Es gibt eine einfache Lösung für einen solchen Fall.
Um PHP CS Fixer in einem Monorepo auszuführen, gibt es die Eigenschaft root in der Konfiguration. Aktualisieren Sie Ihre lefthook.yml
im Stammverzeichnis des Projekts mit der folgenden Konfiguration.
pre-commit:
commands:
web-cs-fixer:
tags: style fixer
root: "path/to/docker_containers/php_web_app/"
glob: "*.php"
stage_fixed: true
run: vendor/bin/php-cs-fixer --config=.php-cs-fixer.dist.php --allow-risky=yes fix {staged_files}
Ersetzen Sie path/to/docker_containers/php_web_app/
durch den Pfad zu Ihrem PHP-Projektverzeichnis. Achtung! Der Pfad sollte mit einem Schrägstrich '/' enden.