watchexec - تشغيل الأوامر عند تغيير الملفات
watchexec تراقب مجموعة من الملفات أو المجلدات وتشغّل أمرًا كلما تغيّرت. إنها محايدة لغة والمشروع — لا توجد حاجة لملف تكوين — وتتعامل مع الأجزاء الصعبة من مراقبة الملفات بالنسبة لك: إلغاء الارتجاع للتغييرات السريعة واحترام .gitignore وإعادة تشغيل العمليات طويلة الأمد بشكل نظيف وتمرير المسارات المتغيّرة إلى أمرك. استخدمها لإعادة تشغيل الاختبارات تلقائيًا أو إعادة تشغيل خادم dev أو إعادة البناء عند الحفظ.
التثبيت
| المنصة | الأمر |
|---|
| Cargo (جميع المنصات) | cargo install watchexec-cli |
| macOS (Homebrew) | brew install watchexec |
| Arch Linux | sudo pacman -S watchexec |
| Debian/Ubuntu | قم بتنزيل .deb من الإصدارات |
| Windows (Scoop) | scoop install watchexec |
| التحقق | watchexec --version |
الاستخدام الأساسي
| الأمر | الوصف |
|---|
watchexec "cargo test" | تشغيل الاختبارات عند أي تغيير |
watchexec -e py "pytest" | فقط شاهد ملفات .py |
watchexec -e js,ts,jsx "npm run build" | شاهد امتدادات متعددة |
watchexec -- ls -la | كل شيء بعد -- هو الأمر |
watchexec --help | قائمة الخيارات الكاملة |
تصفية ما تشاهده
| الخيار | الوصف |
|---|
-e, --exts py,rs | فقط تشغيل على امتدادات الملفات هذه |
-w, --watch DIR | شاهد مسار محدد (قابل للتكرار) |
-i, --ignore GLOB | تجاهل المسارات التي تطابق glob |
--ignore-file FILE | حمّل أنماط التجاهل من ملف |
--no-vcs-ignore | لا تستخدم قواعد .gitignore |
-f, --filter GLOB | فقط شاهد الملفات المطابقة لـ glob |
إدارة العمليات
| الخيار | الوصف |
|---|
-r, --restart | أعد تشغيل الأمر عند التغيير (قتل + إعادة تشغيل) |
-s, --signal SIG | الإشارة المراد إرسالها عند إعادة التشغيل (مثل SIGTERM) |
--stop-timeout 5s | فترة السماح قبل القتل القسري |
-o, --on-busy-update MODE | queue أو do-nothing أو restart أو signal |
-n | لا مجموعة عمليات (أرسل الإشارة إلى الطفل المباشر فقط) |
استخدم -r للعمليات طويلة المدى (الخوادم) والافتراضي للأوامر التي تعمل مرة واحدة (الاختبارات والبناء).
إلغاء الارتجاع والتوقيت
| الخيار | الوصف |
|---|
--debounce 200ms | انتظر حتى تستقر التغييرات قبل التشغيل |
--delay-run 1s | تأخير قبل تشغيل الأمر |
-p, --postpone | لا تشغّل حتى التغيير الأول (تخطّ التشغيل الأولي) |
السلوك المفيد
| الخيار | الوصف |
|---|
-c, --clear | امسح الشاشة قبل كل تشغيل |
--emit-events-to environment | مرّر المسارات المتغيّرة عبر متغيرات env |
-N, --notify | إشعار سطح المكتب عند الانتهاء |
--project-origin DIR | حدد جذر المشروع لقواعد التجاهل |
-v | مفصل (يصحح ما ينبه) |
متغيرات البيئة (المسارات المتغيّرة)
عند بعث الأحداث إلى البيئة يمكن لأمرك أن يرى ما تغيّر:
| المتغير | يحتوي على |
|---|
WATCHEXEC_COMMON_PATH | البادئة المشتركة للمسارات المتغيّرة |
WATCHEXEC_WRITTEN_PATH | الملفات المكتوبة |
WATCHEXEC_CREATED_PATH | الملفات المنشأة |
WATCHEXEC_REMOVED_PATH | الملفات المحذوفة |
سير العمل الشائع
# إعادة تشغيل مجموعة الاختبارات تلقائيًا عند أي تغيير المصدر
watchexec -e rs "cargo test"
# أعد تشغيل خادم dev بنظافة عند التغيير
watchexec -r -e go "go run ./cmd/server"
# أعد البناء ومسح الشاشة وتجاهل مجلد dist
watchexec -c -i "dist/**" -e ts "npm run build"
# فقط بعد استقرار التغييرات (تجنب الضجة عند الحفظ بالدفعة)
watchexec --debounce 500ms -e py "pytest -x"
watchexec مقابل الأدوات ذات الصلة
| الأداة | النموذج |
|---|
| watchexec | مراقب ملفات قائم بذاته خالي من التكوين |
| entr | الحد الأدنى يقرأ قائمة الملفات من stdin |
| nodemon | ركز على Node وأعد تشغيل تطبيقات node |
| mise/just + watchexec | منفذو المهام الذين يستدعونهم إلى watchexec |
منفذو المهام مثل just و mise غالبًا ما يقترنان بـ watchexec لإضافة مراقبة الملفات إلى وصفاتهم.
الموارس