Skip to main content
Dieser Artikel basiert auf der README.md und UPGRADE.md von laravel/cpx. Er bezieht sich auf den Stand von v2.0.0 (veröffentlicht am 24. Juli 2026).

Was ist cpx?

cpx ist ein Tool, mit dem sich in Composer-Paketen enthaltene Befehle ausführen lassen, ohne sie zu installieren. Am einfachsten lässt es sich als das Composer-Pendant zu npx aus der npm-Welt beschreiben.
Intern installiert cpx die Pakete in ein isoliertes Verzeichnis und führt sie von dort aus. Dadurch entstehen keine Konflikte mit Composer-Abhängigkeiten im Projekt oder in der globalen Installation. Ab dem zweiten Aufruf wird dieselbe Installation wiederverwendet, was die Ausführung beschleunigt.

Warum wird das benötigt?

Die Installation einzelner Tools über composer global require bringt folgende Probleme mit sich:
  • Globale Abhängigkeiten kollidieren miteinander (besonders häufig bei Tools mit gemeinsamen Abhängigkeiten wie nikic/php-parser oder symfony/console).
  • Wechsel zwischen unterschiedlichen Versionen desselben Tools je nach Projekt.
  • Im Dauerbetrieb wird das Aktualisieren globaler Pakete oft vergessen.
  • Einmalig benötigte Tools sollen nicht global installiert werden.
cpx selbst ist als eigenständige PHAR ausgelegt und hat zur Laufzeit keine Composer-Abhängigkeiten. Auch eine globale Installation verursacht daher keine Konflikte.

Vollständige Neuimplementierung in v2.0

cpx wurde in v2.0 vollständig neu geschrieben und wird jetzt als eigenständige PHAR ausgeliefert. Die grundlegende Verwendung (cpx <package-name> <command> [arguments]) und das Cache-Verzeichnis ~/.cpx bleiben unverändert. Die Entwicklung von 1.x ist eingestellt; es wird keine weiteren Releases geben – auch keine Bugfixes oder Sicherheitsupdates. Für das Upgrade genügt eine erneute globale Installation.
v2.0 erfordert PHP 8.3 oder höher.

Neue Funktionen in v2.0

Bevorzugte Ausführung lokaler Binaries

Analog zu npx wird eine bereits im Projekt installierte Binary bevorzugt ausgeführt, bevor eine isolierte Kopie installiert wird. cpx sucht vom aktuellen Verzeichnis aufwärts nach dem nächstgelegenen Composer-Projekt und führt die passende Binary in vendor/bin (das Standard-bin-dir) aus.
Wenn Sie eine isolierte Kopie erzwingen möchten, verwenden Sie --skip-local.

Direkte Ausführung eines lokalen Paketverzeichnisses

Sie können ein in Entwicklung befindliches Paketverzeichnis direkt angeben, um dessen Binary auszuführen.
Das Zielverzeichnis muss eine gültige composer.json enthalten, und die Abhängigkeiten müssen zuvor in vendor/autoload.php installiert worden sein. cpx führt in diesem Fall weder Composer aus noch kopiert oder cached es das Paket.

cpx exec und cpx tinker

Für die schnelle Ausführung von PHP-Code stehen mehrere Möglichkeiten zur Verfügung. Innerhalb eines Laravel-Projekts bootet cpx exec die Anwendung vollständig einschließlich Config, Facades und .env ($app steht zur Verfügung), während cpx tinker das projekteigene php artisan tinker ausführt (sofern laravel/tinker installiert ist). Außerhalb wird eine PsySH-Shell gestartet. Innerhalb von Skripten können Pakete mit cpx_require('vendor/package') (in 1.x hieß es composer_require()) direkt autoloadbar gemacht werden.

Aliase

Damit Sie sich keine langen Paketnamen merken müssen, können Sie eigene Kürzel definieren.
Die in 1.x eingebaute Liste populärer Paket-Aliase wurde entfernt; falls Sie sie benötigen, müssen Sie diese selbst definieren.

Nicht-interaktiver Modus und JSON-Ausgabe

cpx erkennt nicht-interaktive Umgebungen automatisch über laravel/agent-detector (Erkennung von KI-Agenten), Umleitung der Standardeingabe sowie die Flags --no-interaction/-n. Im nicht-interaktiven Modus geben Managementbefehle wie installed, aliases, alias, unalias, clean und update anstelle von formatiertem Text eine einzeilige JSON-Antwort zurück. Auch von einem interaktiven Terminal aus erhalten Sie dieselbe Ausgabe, indem Sie --json übergeben.

Wichtige Änderungen gegenüber v1.x (Befehle)

Verwandte Seiten

Cache und ältere Paketversionen im Verzeichnis ~/.cpx werden automatisch in das neue Format migriert. Pakete, die mit Versions-Constraints ausgeführt wurden, werden unter neuen Verzeichnisnamen verwaltet und daher nur einmalig neu installiert. Nicht mehr benötigte Kopien aus der 1.x-Ära können Sie mit cpx clean entfernen.

laravel/cpx Repository

Quellcode und aktuelle README hier.

cpx 2.0 Upgrade-Guide

Detaillierte Migrationsschritte von 1.x zu 2.x.
Zuletzt geändert am 2. August 2026