Das Kommando artisan dev führt vier Entwicklungsprozesse in einem Terminal aus: HTTP-Server, Queue-Worker, Log-Viewer (Pail) und Vite. Bis Laravel 13.25 wurden alle Ausgaben in den gleichen Stream geschrieben, was zu Leseproblemen führte, wenn mehrere Prozesse gleichzeitig protokollierten – etwa wenn ein Vite-Rebuild einen Stack-Trace von Pail überlagerte.
Laravel 13.25 ersetzt den Process-Manager concurrently durch @laravel/multiplex, eine neue Terminal-UI, die jede Prozess-Ausgabe isoliert und keine Installation oder Konfiguration erfordert. Die Integration wurde von Joe Tannenbaum (PR #61100) beigesteuert.
Drei Display-Modi
Tabs-Modus (Standard) vergibt an jeden Prozess einen eigenen Tab. Nutzer wechseln zwischen Tabs, um einen Stream nach dem anderen zu lesen. Einzelne Prozesse können unabhängig neu gestartet oder gelöscht werden, und ein abgestürzter Prozess startet automatisch neu, ohne den gesamten Stack zu unterbrechen.
Stream-Modus reproduziert das alte Verhalten, bietet aber Scroll- und Suchfunktionen und zeigt alle Ausgaben in einem einzigen verschachtelten Feed.
Inline-Modus gibt reinen Text ohne UI aus und wird automatisch ausgewählt, wenn es kein TTY gibt (in Containern, CI oder unter Process-Supervisoren).
Flags zur Laufzeit wählen einen Modus: `php artisan dev --tabs`, `php artisan dev --stream` oder `php artisan dev --inline` (Kurzformen: -t, -s, -i). Nutzer können während des Betriebs zwischen Tabs und Stream umschalten.
Konfigurationsmethoden
Sieben DevCommands-Methoden konfigurieren das Verhalten projekt-weit in der boot()-Methode eines Service-Providers: - `DevCommands::tabs()` – Tab-Modus (Standard) - `DevCommands::stream()` – verschachtelter Feed - `DevCommands::inline()` – reine Ausgabe - `DevCommands::withTimestamps()` – präfixt jede Zeile mit Zeitstempel - `DevCommands::disableAutoRestart()` – lässt abgestürzte Prozesse gestoppt - `DevCommands::bufferSize(lines)` – Ring-Buffer-Größe pro Prozess im Tabs-Modus - `DevCommands::streamBufferSize(lines)` – insgesamt behaltene Zeilen im Stream-Modus
Command-Line-Flags überschreiben Service-Provider-Einstellungen. Im Tabs-Modus verwaltet jeder Prozess seinen eigenen Ring-Buffer, wodurch ein verbose Prozess (wie Vite) andere Ausgaben nicht aus dem Sichtbereich verdrängt.
Auto-Restart-Verhalten
Abgestürzte Prozesse starten standardmäßig automatisch neu, was das bisherige --kill-others-on-fail-Verhalten ersetzt, bei dem jeder Fehler den gesamten Stack stoppte. Dies passt zu häufigen Szenarien: ein Queue-Worker stürzt ab, weil bei der Bearbeitung einer Job-Klasse ein fataler Fehler auftritt, oder Vite schlägt wegen eines schlechten Imports fehl. Der Prozess wird wiederhergestellt, wenn die Datei korrigiert wird, ohne dass ein manueller Neustart erforderlich ist. Verwenden Sie `--no-restart`, um dies pro Run zu deaktivieren, oder rufen Sie `DevCommands::disableAutoRestart()` dauerhaft auf.
Plattformunterstützung und Anforderungen
Multiplex läuft nativ auf macOS und Linux. Windows verwendet weiterhin concurrently; Modus- und Buffer-Methoden sind dort No-Ops, obwohl `--timestamps` und `--no-restart` auf äquivalente concurrently-Flags übersetzt werden.
Node.js v22.13 oder neuer ist erforderlich. Laravel pinnt @laravel/multiplex auf eine spezifische Minor-Version und führt es über den Package-Manager des Projekts aus (pnpm dlx für pnpm-Projekte, npx für npm), ohne eine Abhängigkeit zu package.json hinzuzufügen.
Zusätzliche Funktionen
Suchfunktionalität arbeitet in Tabs- und Stream-Modi. Das `--json`-Flag gibt newline-delimited JSON-Events statt formatierter Ausgabe aus und ermöglicht Integration mit Editor-Erweiterungen oder Dashboards, die strukturierte Prozessdaten konsumieren.
SERVER_HOST-Fix
Ein zusammenhängender Fix in der gleichen Version korrigiert ein Problem, bei dem explizite Command-Line-Argumente für den serve-Prozess umgebungsgestützte Standards außer Kraft setzten. Der Server war als `serve --host=localhost` registriert, was die Umgebungsvariable SERVER_HOST ignorierte. Der Standard ist jetzt einfach `serve`, wodurch die Möglichkeit wiederhergestellt wird, den Dev-Server anderen Netzwerkgeräten freizulegen: `SERVER_HOST=0.0.0.0 php artisan dev`. Nutzer, die zur Umgehung ein benutzerdefiniertes Server-Kommando registrierten, können es entfernen.
Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.