Türchen 14: Eigene Composer-Modul Patches

Vendor-Module kann man oft im Local-Pool des Frameworks erweitern (z.B. Magento Plugins). Manchmal gibt es aber Situationen, wo das nicht möglich ist. Die Gründe können dabei vielfältig sein. Aus diesem Grund muss man manchmal Patches schreiben und diese auf Vendor-Module anwenden lassen. Damit diese bei einer Neuinstallation nicht vergessen werden, zeigen wir euch in diesem Türchen ein Composer-Patches Modul, was dafür sorgt, dass all eure Patches nach einem „composer install“ automatisch angewendet werden.

Installation

Das Composer-Patches Modul können wir ganz normal auch über Composer installieren:

$ composer require vaimo/composer-patches

Patch-Listen einbinden

Gerade wenn man mit Module arbeitet, um Dinge thematisch voneinander zu trennen, ist es schlau Patch-Listen pro Modul einzubinden. Das sind einfache JSON-Dateien, die in der composer.json unter dem Knoten „extra“ wie folgt angegeben werden:

"patches-file": [
  "app/patch/composer.patches.json"
]

In diesen JSON-Dateien werden dann die thematischen Patches für dieses Modul und pro Vendor-Modul, welches sie patchen sollen, aufgelistet:

{
  "patches": {
    "vendor/module-name": {
      "PatchName": "app/patch/PatchName.patch"
    }
  }
}

Patch Aufbau & Erstellung

Eine normale Patch-Datei hat folgenden Aufbau und zeigt einfach nur in einer bestimmten Formatierung welche Zeilen gelöscht und welche hinzugefügt werden. Das Ganze natürlich mit exakt passender Angabe von Zeile und Zeichen.

--- Model/Name.php	2023-07-21 08:45:08 +0000
+++ Model/Name.php	2023-09-23 08:52:16 +0000
@@ -15,7 +15,7 @@
  */
 class Name extends Validator
 {
-    private const PATTERN = '/(?:[\p{L}\p{M}/u';
+    private const PATTERN = '/(?:[\p.*/u';

     /**
      * Validate name fields.

Solche Dateien wirklich zeichengenau und inhaltlich korrekt zu schreiben ist selber fast unmöglich. Genau aus diesem Grund gibt es einen Terminal-Command, den wir nutzen können. Hierbei brauchen wir die Original-Datei und einmal eine modifizierte Kopie, wie sie nach dem Anwenden des Patches sein sollte.

$ diff -u Name.php Name_modified.php > PatchName.patch

Wenn ihr all diese Schritte durchgeführt habt, sollte beim nächsten „composer install“ euer Patch automatisch angewendet werden. Happy Coding!

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert