Salta ai contenuti

watchexec - Cheatsheet Run Commands on File Changes

watchexec - Cheatsheet Run Commands on File Changes

watchexec osserva un set di file o directory ed esegue un comando quando cambiano. È language- e project-agnostic — nessun file di config richiesto — e maneggia le parti fastidiose di file-watching per te: debouncing i cambiamenti rapidi, rispettando .gitignore, riavviando pulitamente i processi long-running, e passando i path cambiati al tuo comando. Usalo per auto-run test, riavviare un dev server, o ricostruire su salvataggio.

Installazione

PiattaformaComando
Cargo (tutte piattaforme)cargo install watchexec-cli
macOS (Homebrew)brew install watchexec
Arch Linuxsudo pacman -S watchexec
Debian/Ubuntuscarica il .deb da Releases
Windows (Scoop)scoop install watchexec
Verificawatchexec --version

Utilizzo di Base

ComandoDescrizione
watchexec "cargo test"Esegui test su qualsiasi cambiamento
watchexec -e py "pytest"Solo osserva file .py
watchexec -e js,ts,jsx "npm run build"Osserva multiple estensioni
watchexec -- ls -laTutto dopo -- è il comando
watchexec --helpLista opzione completa

Filtraggio Cosa Osservare

OpzioneDescrizione
-e, --exts py,rsSolo trigger su queste file extensions
-w, --watch DIROsserva un percorso specifico (ripetibile)
-i, --ignore GLOBIgnora percorsi matching un glob
--ignore-file FILECarica ignore patterns da un file
--no-vcs-ignoreNon usare regole .gitignore
-f, --filter GLOBSolo osserva file matching un glob

Process Management

OpzioneDescrizione
-r, --restartRiavvia il comando su cambiamento (kill + rerun)
-s, --signal SIGSegnale da inviare quando riavvi (e.g. SIGTERM)
--stop-timeout 5sGrace period prima di force-kill
-o, --on-busy-update MODEqueue, do-nothing, restart, o signal
-nNessun process group (invia segnale al direct child solamente)

Usa -r per processi long-running (server), e il default per comandi one-shot (test, build).

Debouncing & Timing

OpzioneDescrizione
--debounce 200msAspetta che i cambiamenti si sistemino prima di eseguire
--delay-run 1sRitardo prima che il comando esegua
-p, --postponeNon eseguire finché il primo cambiamento (salta initial run)

Comportamento Utile

OpzioneDescrizione
-c, --clearPulisci lo schermo prima di ogni run
--emit-events-to environmentPassa i path cambiati via env vars
-N, --notifyNotifica desktop su completamento
--project-origin DIRImposta la root del progetto per ignore rules
-vVerbose (debug cosa trigga)

Environment Variables (Changed Paths)

Quando gli eventi vengono emessi all”ambiente, il tuo comando può vedere cosa è cambiato:

VariabileContiene
WATCHEXEC_COMMON_PATHCommon prefix dei path cambiati
WATCHEXEC_WRITTEN_PATHFile scritti
WATCHEXEC_CREATED_PATHFile creati
WATCHEXEC_REMOVED_PATHFile rimossi

Workflow Comuni

# Auto-run il test suite su qualsiasi source change
watchexec -e rs "cargo test"

# Riavvia un dev server pulitamente su cambiamento
watchexec -r -e go "go run ./cmd/server"

# Ricostruisci e pulisci lo schermo, ignorando la cartella dist
watchexec -c -i "dist/**" -e ts "npm run build"

# Solo dopo che i cambiamenti si sistemino (evita thrashing su bulk save)
watchexec --debounce 500ms -e py "pytest -x"

watchexec vs Tool Correlati

ToolModel
watchexecStandalone, config-free file watcher
entrMinimal, legge lista file da stdin
nodemonNode-focused, riavvia node app
mise/just + watchexecTask runner che shell out a watchexec

Task runner come just e mise spesso pair con watchexec per aggiungere file-watching alle loro ricette.

Risorse