Aller au contenu

watchexec - Cheatsheet Exécuter les Commandes sur Changements de Fichiers

watchexec - Cheatsheet Exécuter les Commandes sur Changements de Fichiers

watchexec observe un ensemble de fichiers ou de répertoires et exécute une commande chaque fois qu”ils changent. C”est agnostique au langage et au projet — aucun fichier de configuration requis — et gère les parties délicates de l”observation de fichiers pour toi : débounce des changements rapides, respect de .gitignore, redémarrage propre des processus longue durée et passage des chemins changés à ta commande. Utilise-le pour réexécuter auto les tests, redémarrer un serveur de dev ou reconstruire à la sauvegarde.

Installation

PlateformeCommande
Cargo (toutes les plateformes)cargo install watchexec-cli
macOS (Homebrew)brew install watchexec
Arch Linuxsudo pacman -S watchexec
Debian/Ubuntutélécharger le .deb depuis Releases
Windows (Scoop)scoop install watchexec
Vérificationwatchexec --version

Utilisation Basique

CommandeDescription
watchexec "cargo test"Exécuter les tests sur n”importe quel changement
watchexec -e py "pytest"Observer uniquement les fichiers .py
watchexec -e js,ts,jsx "npm run build"Observer plusieurs extensions
watchexec -- ls -laTout après -- est la commande
watchexec --helpListe complète des options

Filtrer Quoi Observer

OptionDescription
-e, --exts py,rsDéclencher uniquement sur ces extensions de fichier
-w, --watch DIRObserver un chemin spécifique (répétable)
-i, --ignore GLOBIgnorer les chemins correspondant un glob
--ignore-file FILECharger les motifs d”ignorage depuis un fichier
--no-vcs-ignoreNe pas utiliser les règles de .gitignore
-f, --filter GLOBObserver uniquement les fichiers correspondant un glob

Gestion des Processus

OptionDescription
-r, --restartRedémarrer la commande au changement (tuer + réexécuter)
-s, --signal SIGSignal à envoyer au redémarrage (ex. SIGTERM)
--stop-timeout 5sPériode de grâce avant force-kill
-o, --on-busy-update MODEqueue, do-nothing, restart ou signal
-nPas de groupe de processus (envoyer le signal uniquement à l”enfant direct)

Utiliser -r pour les processus longue durée (serveurs) et le défaut pour les commandes uniques (tests, builds).

Débounce et Timing

OptionDescription
--debounce 200msAttendre que les changements se stabilisent avant d”exécuter
--delay-run 1sDélai avant l”exécution de la commande
-p, --postponeNe pas exécuter jusqu”au premier changement (ignorer l”exécution initiale)

Comportement Utile

OptionDescription
-c, --clearEffacer l”écran avant chaque exécution
--emit-events-to environmentPasser les chemins changés via les variables d”env
-N, --notifyNotification de bureau à l”achèvement
--project-origin DIRDéfinir la racine du projet pour les règles d”ignorage
-vVerbose (debug ce qui déclenche)

Variables d”Environnement (Chemins Changés)

Quand les événements sont émis à l”environnement, ta commande peut voir ce qui a changé :

VariableContient
WATCHEXEC_COMMON_PATHPréfixe commun des chemins changés
WATCHEXEC_WRITTEN_PATHFichiers écrits
WATCHEXEC_CREATED_PATHFichiers créés
WATCHEXEC_REMOVED_PATHFichiers supprimés

Flux de Travail Courants

# Réexécuter auto la suite de tests sur n''importe quel changement source
watchexec -e rs "cargo test"

# Redémarrer proprement un serveur dev au changement
watchexec -r -e go "go run ./cmd/server"

# Reconstruire et effacer l''écran, en ignorant le dossier dist
watchexec -c -i "dist/**" -e ts "npm run build"

# Uniquement après que les changements se stabilisent (éviter les thrashings en saveout vrac)
watchexec --debounce 500ms -e py "pytest -x"

watchexec vs Outils Connexes

OutilModèle
watchexecObservateur de fichiers autonome, sans config
entrMinimaliste, lit la liste de fichiers depuis stdin
nodemonFocalisé Node, redémarrage des apps node
mise/just + watchexecTask runners qui font un shell vers watchexec

Les task runners comme just et mise s”associent souvent avec watchexec pour ajouter l”observation de fichiers à leurs recettes.

Ressources