Composer verstehen - Teil 4 - Patches

von

Den Code des CMS Cores oder von Modulen von Drittanbietern sollte man nie anpassen(!), da diese Änderungen bei einem Update wieder überschrieben werden. Vor allem bei der Arbeit mit Composer ist das auf keinen Fall zu empfehlen, da der Code von extern ins Projekt geladen und überschrieben wird.

Was ist aber, wenn man zum Beispiel trotzdem eine kleine Änderungen an einem Modul machen muss, weil man eine spezifische Funktion dringend braucht? Oder man muss eine Sicherheitslücke dringend schliessen, aber der Anbieter des Moduls hat noch kein Update dazu veröffentlicht? In solchen Fällen bietet es sich an, einen Patch zu erstellen und einzubinden.

Ein Patch (Flick, Flickwerk) beinhaltete kleine Funktions-Änderungen oder -Erweiterungen für ein bestimmtes Programm/Modul.

Cameron Eagans hat ein Composer-Paket namens composer-patches erstellt, mit dem Patches für Composer-Pakete sehr einfach eingesetzt und verwaltet werden können.

Installiert wird es wie gewohnt via composer require.

$ composer require "cweagans/composer-patches"

Patches können direkt in der composer.json unter extras/patches/ definiert werden. Eine Patch-Datei kann lokal aber auch extern liegen.

"extra": {
	"patches": {
		"vendor/package": {
			"An example patch local": "patches/my_example.patch",
			"An example patch extern": "https://github.com/marcosimbuerger/my_example.patch"
		}
	}
}

Man kann jedoch auch eine externe Datei einbinden, in der die Patches definiert sind. Bei vielen Patches ist dies von Vorteil, damit die composer.json übersichtlich bleibt. Es empfiehlt sich die externe Datei composer.patches.json zu nennen. In der composer.json wird dann nur noch auf diese Datei verlinkt.

"extra": {
	"patches-file": "composer.patches.json",
	"enable-patching": true
}

Die composer.patches.json Datei enthält die entsprechenden Patches.

{
	"patches": {
		"vendor/package": {
			"An example patch local": "patches/my_example.patch",
			"An example patch extern": "https://github.com/marcosimbuerger/my_example.patch"
		}
	}
}

Wie man einen Patch erstellt und einspielt habe ich bereits hier beschrieben: Mit Composer einen Patch für ein Contao-Modul einspielen

Zurück

Kommentare

Einen Kommentar schreiben

Bitte rechnen Sie 6 plus 8.