Zum Inhalt springen

watchexec - Ausführe Befehle auf Datei-Änderungen-Spickzettel

watchexec - Ausführe Befehle auf Datei-Änderungen-Spickzettel

watchexec beobachtet eine Menge von Dateien oder Verzeichnissen und führt einen Befehl immer dann aus, wenn sie sich ändern. Es ist Sprach- und Projekt-agnostisch — keine Konfigurationsdatei erforderlich — und handhhabt die fiddly Teile des Datei-Beobachtens für dich: Debouncing schneller Änderungen, .gitignore respektieren, langlebige Prozesse sauber neu starten und geänderte Pfade an deinen Befehl weitergeben. Verwende es, um Tests automatisch auszuführen, einen Dev-Server neu zu starten oder beim Speichern neu zu bauen.

Installation

PlattformBefehl
Cargo (alle Plattformen)cargo install watchexec-cli
macOS (Homebrew)brew install watchexec
Arch Linuxsudo pacman -S watchexec
Debian/Ubuntu.deb von Releases herunterladen
Windows (Scoop)scoop install watchexec
Verifizierenwatchexec --version

Grundlegende Nutzung

BefehlBeschreibung
watchexec "cargo test"Tests bei jeder Änderung ausführen
watchexec -e py "pytest"Nur .py-Dateien beobachten
watchexec -e js,ts,jsx "npm run build"Mehrere Extensions beobachten
watchexec -- ls -laAlles nach -- ist der Befehl
watchexec --helpVollständige Optionsliste

Filtern, was zu beobachten ist

OptionBeschreibung
-e, --exts py,rsNur bei diesen Datei-Extensions triggern
-w, --watch DIREinen spezifischen Pfad beobachten (wiederholbar)
-i, --ignore GLOBPfade matching a glob ignorieren
--ignore-file FILEIgnore-Muster aus einer Datei laden
--no-vcs-ignoreKeine .gitignore-Regeln verwenden
-f, --filter GLOBNur Dateien, die a glob matching beobachten

Prozess-Management

OptionBeschreibung
-r, --restartBefehl bei Änderung neu starten (Kill + Rerun)
-s, --signal SIGSignal beim Neustart zu senden (z.B. SIGTERM)
--stop-timeout 5sGrace-Zeit vor Force-Kill
-o, --on-busy-update MODEqueue, do-nothing, restart oder signal
-nKeine Prozess-Gruppe (Signal nur zum direkten Kind senden)

Verwende -r für langlebige Prozesse (Server), und die Standard für One-Shot-Befehle (Tests, Builds).

Debouncing & Timing

OptionBeschreibung
--debounce 200msWarte auf Änderungen zum Settled, bevor du läufst
--delay-run 1sVerzögerung, bevor der Befehl läuft
-p, --postponeNicht bis zum ersten Wechsel ausführen (Skip-Initialität-Lauf)

Nützliches Verhalten

OptionBeschreibung
-c, --clearScreen vor jedem Lauf löschen
--emit-events-to environmentGeänderte Pfade via Env-Vars weitergeben
-N, --notifyDesktop-Benachrichtigung auf Completion
--project-origin DIRProjekt-Root für Ignore-Regeln setzen
-vVerbose (Debug, was triggert)

Umgebungs-Variablen (Geänderte Pfade)

Wenn Events zur Umgebung emittiert werden, kann dein Befehl sehen, was sich geändert hat:

VariableEnthält
WATCHEXEC_COMMON_PATHGemeinsamer Prefix der geänderten Pfade
WATCHEXEC_WRITTEN_PATHGeschriebene Dateien
WATCHEXEC_CREATED_PATHErstellte Dateien
WATCHEXEC_REMOVED_PATHEntfernte Dateien

Häufige Workflows

# Auto-Run der Test-Suite bei jeder Source-Änderung
watchexec -e rs "cargo test"

# Dev-Server sauber bei Änderung neu starten
watchexec -r -e go "go run ./cmd/server"

# Neubauen und Screen löschen, dist-Ordner ignorieren
watchexec -c -i "dist/**" -e ts "npm run build"

# Nur nach Änderungen settled (Thrashing bei Bulk-Saves vermeiden)
watchexec --debounce 500ms -e py "pytest -x"

watchexec im Vergleich zu verwandten Tools

ToolModell
watchexecStandalone, konfigurationsfrei Datei-Watcher
entrMinimal, liest Datei-Liste von Stdin
nodemonNode-fokussiert, startet Node-Apps neu
mise/just + watchexecTask-Läufer, die zu watchexec ausschellen

Task-Läufer wie just und mise werden oft mit watchexec gekoppelt, um Datei-Beobachtung zu ihren Rezepten hinzuzufügen.

Ressourcen