CARGO-WATCH(1) General Commands Manual CARGO-WATCH(1)

cargo-watch - بر کدهای منبع پروژه Cargo شما نظارت می‌کند

cargo watch [--version  -V]  
cargo watch [--help  -h]  

بر کدهای منبع پروژه شما برای تشخیص تغییرات نظارت می‌کند و هنگام رخ دادن آن‌ها، دستورات Cargo را اجرا می‌نماید.

زیردستور Cargo که هنگام تغییر فایل‌های تحت نظارت و در زمان راه‌اندازی اجرا می‌شود، مگر اینکه گزینه --postpone مشخص شده باشد.

این در واقع همانند <command> است اما با پیشوند cargo، با این تفاوت که علاوه بر آن، گزینه‌های مختص cargo مانند --features نیز اعمال می‌شوند.

دستوری که هنگام تغییر فایل‌های تحت نظارت و در زمان راه‌اندازی اجرا می‌شود، مگر اینکه گزینه --postpone مشخص شده باشد.

تمام دستورات ارسال‌شده با && به یکدیگر متصل می‌شوند.

دستورات Cargo (گزینه -x) همیشه پیش از دستورات پوسته (گزینه -s) اجرا می‌شوند.

اگر یک دستور انتهایی با -- <command> مشخص شود، جایگزین تمام دستورات دیگر خواهد شد.

نمایش این پیام راهنما.
نمایش اطلاعات نسخه.
نمایش خروجی اشکال‌زدایی (دیباگ).
نمایش مسیرهایی که دچار تغییر شده‌اند.
عدم نمایش خروجی‌های خود cargo-watch.
از یافتن وابستگی‌های محلی کریت فعلی و نظارت بر دایرکتوری‌های کاری آن‌ها صرف‌نظر می‌کند. فقط بر دایرکتوری جاری نظارت خواهد شد.
نظارت بر فایل(ها) یا پوشه(های) خاص. جستجو و نظارت بر وابستگی‌های محلی را غیرفعال می‌کند.

به‌طور پیش‌فرض، دایرکتوری‌های فضای‌کاری (workspace) پروژه شما و تمام وابستگی‌های محلی به جز پوشه‌های target/ و .git/ تحت نظارت قرار می‌گیرند. فایل‌های .ignore و .gitignore شما برای فیلتر کردن مسیرها استفاده می‌شوند.

نادیده گرفتن یک الگوی منطبق بر سبک glob/gitignore.

در ویندوز، اسلش‌های مستقیم (/) در الگوهای ارائه‌شده به -i به‌طور خودکار به بک‌اسلش تبدیل می‌شوند تا قابلیت حمل دستورات آسان‌تر شود.

از فایل‌های .gitignore استفاده نکن.
از فایل‌های .ignore استفاده نکن.
هیچ چیزی را نادیده نگیر، حتی target/ و .git/.
پاک کردن صفحه قبل از هر بار اجرا.
تزریق یک متغیر محیطی.
تزریق متغیرهای محیطی از یک فایل به سبک dotenv.
تزریق متغیر RUST_BACKTRACE=<value> به محیط اجرایی.

این گزینه زمانی مفید است که خطاها (panics) مدیریت شده‌اند و شما می‌خواهید ردگیری پشته چاپ شود: در حالت معمول باید RUST_BACKTRACE=1 را خودتان اضافه می‌کردید، اما این گزینه آن را به -B1 کوتاه می‌کند!

تزریق متغیر RUST_LOG=<value> به محیط اجرایی.
گزینه ناپایدار و آزمایشی که متغیرهای محیطی WATCHEXEC_* را روی دستور تنظیم می‌کند تا اطلاعات مربوط به تغییرات فایلی که cargo watch مشاهده کرده را جمع‌آوری نماید. به این گزینه اتکا نکنید، ممکن است بدون اطلاع قبلی حذف شده یا تغییر کند.

توجه داشته باشید که تضمینی وجود ندارد فایل‌های فهرست‌شده لیست کامل فایل‌های تغییریافته باشند یا اصلاً تغییری کرده باشند، و این رفتار ممکن است بین پلتفرم‌های مختلف متفاوت باشد. به‌طور کلی، پیدا کردن لیست فایل‌های تغییریافته بهتر است توسط ابزارهای دیگر مانند find انجام شود تا تمام فایل‌هایی که تاریخ اصلاح آن‌ها بزرگ‌تر از آخرین اجرای شناخته‌شده است لیست شوند.

تغییر دایرکتوری کاری به مسیر path مشخص‌شده.

پیش‌فرض، ریشه کریت است، همان‌طور که توسط cargo locate-project پیدا می‌شود.

به تعویق انداختن نخستین اجرا تا زمانی که یک فایل تغییر کند.
اجبار به استفاده از روش سرکشی (polling) برای تشخیص تغییرات فایل.
به‌طور پیش‌فرض، Cargo Watch از یک گروه فرآیند (process group) برای اجرای دستور(ها) استفاده می‌کند. این گزینه آن رفتار را غیرفعال می‌سازد.
تاخیر حذف نوسان (debounce) به‌روزرسانی فایل‌ها بر حسب ثانیه (پیش‌فرض: 0.5).
دستور را در حالی که هنوز در حال اجراست، مجدداً راه‌اندازی نکن.
نادیده گرفتن رویدادهایی که در حین اجرای دستورات منتشر می‌شوند.
فهرست قابلیت‌هایی (features) که به فراخوانی‌های cargo ارسال می‌شوند.

این ویژگی‌ها به تمام زیردستورهای پشتیبانی‌شده cargo ارسال خواهند شد. برای نمونه، با این دستور:

$ cargo watch --features foo,bar -x clean -x build -x doc

هر دو دستور build و doc با ویژگی‌های foo و bar اجرا خواهند شد، اما clean این ویژگی‌ها را دریافت نخواهد کرد.

استفاده از یک پوسته دیگر. به عنوان مثال --use-shell=bash. در ویندوز، --use-shell=powershell را امتحان کنید.

مقدار ویژه none از هیچ پوسته‌ای استفاده نمی‌کند، اما فقط با یک دستور انتهایی کار می‌کند، نه با -x یا -s.

اجرای cargo check هنگام ذخیره فایل:

$ cargo watch

فقط اجرای تست‌ها:

$ cargo watch -x test

ابتدا اجرای check و سپس test:

$ cargo watch -x check -x test

اجرای run همراه با آرگومان‌ها:

$ cargo watch -x 'run -- --some-arg'

اجرای یک دستور دلخواه:

$ cargo watch -- echo Hello world

اجرا با ویژگی‌های ارسال‌شده به cargo:

$ cargo watch --features 'foo,bar'

فایل‌های .gitignore به‌طور پیش‌فرض برای نادیده گرفتن مسیرهای تحت نظارت و شروع اجرا استفاده می‌شوند. برای توقف رعایت آن‌ها، گزینه --no-vcs-ignores را ارسال کنید.

فایل‌های .ignore با همان قواعد نحوی نیز به‌طور پیش‌فرض استفاده می‌شوند. این فایل می‌تواند برای مشخص کردن فایل‌هایی استفاده شود که باید توسط cargo watch نادیده گرفته شوند اما در گیت ثبت شوند، بدون اینکه نیاز باشد مدام گزینه‌های --ignore abc را در خط فرمان اضافه کنید. توجه داشته باشید که فایل‌های .ignore ممکن است توسط برنامه‌های دیگر مانند ripgrep(1) نیز استفاده شوند. برای توقف رعایت این فایل‌ها، گزینه --no-dot-ignores را ارسال کنید.

علاوه بر موارد مشخص‌شده در فایل‌ها، Cargo watch دارای یک لیست داخلی از نادیده‌گیری‌های پیش‌فرض است، مانند target/ و .git/ و انواع فایل‌های رایج دیگر (لاگ‌ها، فایل‌های swap ویرایشگر، فایل‌های lock و غیره).

برای نادیده نگرفتن مطلقا هیچ فایلی، از فلگ --ignore-nothing استفاده کنید.

مستندات glob::Pattern در نشانی https://doc.rust-lang.org/glob/glob/struct.Pattern.html را برای مشخصات دقیق‌تر قواعد تطبیق glob مورد استفاده در --ignore مشاهده کنید.

در ویندوز، الگوها باید با جداکننده‌های سبک ویندوز (\\) مشخص شوند. جداکننده‌های سبک یونیکس (/) با مسیرهای ویندوز مطابقت نخواهند داشت، که این امر ممکن است گیج‌کننده باشد و این تصور را ایجاد کند که نادیده‌گیری خط فرمان کار نمی‌کند. برای سهولت کار، کاراکترهای / در نادیده‌گیری‌های خط فرمان هنگام اجرا روی ویندوز به‌طور خودکار به \\ تبدیل می‌شوند، اما همچنان باید تلاش شود الگوهای متناسب با هر پلتفرم نوشته شوند، زیرا ممکن است تفاوت‌های ظریف‌تری نیز وجود داشته باشد.

لطفاً یک گزارش اشکال در https://github.com/watchexec/cargo-watch/issues باز کنید یا گزارش‌های موجود را بررسی فرمایید.

اگر خروجی با جزئیات بیشتر می‌خواهید، اجرای دستور با فلگ --debug را امتحان کنید. توجه داشته باشید که این کار حالت اشکال‌زدایی را برای watchexec نیز فعال می‌کند. هنگام ثبت گزارش، حتماً گزارشی همراه با --debug فعال ارسال کنید تا مشکلات قابل عیب‌یابی باشند، همچنین --version و سیستم‌عامل خود را ذکر نمایید.

اگر مشکل شما مربوط به watchexec (پروژه بالادستی اصلی ما) است، آن را مستقیماً در https://github.com/watchexec/watchexec/issues مطرح کنید. اگر مطمئن نیستید، می‌توانید آن را در بخش پیگیری اشکالات cargo-watch باز کنید، اما اگر واقعاً مربوط به watchexec باشد، به آنجا منتقل خواهد شد.

در نسخه 7.8.0، گزینه --workdir دایرکتوری را قبل از پردازش هر گزینه دیگری تغییر می‌دهد، بنابراین مثلاً مسیرهای --watch ممکن است مطابق انتظار عمل نکنند. این مشکل در کتابخانه Watchexec نسخه ۲ بالادست برطرف شده است.

در نسخه 8.x، گزینه‌های -B، -L، -E، --env-var و --env-file متغیرهای محیطی را به فرآیند اصلی cargo-watch تزریق می‌کنند که ممکن است در برخی شرایط نامطمئن باشد و روی خود cargo-watch نیز تأثیر بگذارد. این مورد در کتابخانه Watchexec نسخه ۲ بالادست برطرف شده است.

همیشه با بررسی نسخه خود با cargo watch --version شروع کنید و در صورت لزوم، با بررسی وب‌سایت پیوند داده‌شده در بالا، به آخرین نسخه ارتقا دهید.

ساخت‌های Cargo (و دستورات check، clippy و تست‌ها چون تست‌ها نیز باید ساخته شوند) قفلی روی پروژه ایجاد می‌کنند تا دو نمونه cargo به‌طور همزمان اجرا نشوند.

با این حال، Rust Analyzer در این زمینه بسیار بهتر عمل می‌کند، بنابراین به جای RLS از آن استفاده کنید.

برای اجبار به استفاده از روش پشتیبان سرکشی، گزینه --poll را امتحان کنید.

اگر همچنان کار نکرد و از ویرایشگری استفاده می‌کنید که ذخیره امن (safe saving) دارد (مانند IntelliJ / PyCharm)، ممکن است لازم باشد «safe saving» را غیرفعال کنید زیرا ممکن است مانع تولید صحیح اعلان‌های فایل شود.

همچنین می‌توانید از گزینه --why استفاده کنید تا ببینید آیا مسیرهای مورد انتظار شما در حال تغییر هستند یا خیر.

این اتفاق ممکن است زمانی رخ دهد که فایل‌های تحت نظارت توسط همان دستوری که اجرا می‌کنید تغییر داده شوند.

اگر فقط کامپایل‌ها یا بررسی‌ها را اجرا می‌کنید (یعنی هر دستوری که فقط بر پوشه target/ تأثیر می‌گذارد) و از -w استفاده می‌کنید، ممکن است سیستم نادیده‌گیر پوشه target را به اشتباه انداخته باشید. گزینه‌ها و مسیرهای خود را بررسی کنید.

همچنین می‌توانید از فلگ --watch-when-idle برای نادیده گرفتن هر رویدادی که در حین اجرای دستور رخ می‌دهد استفاده کنید. این ویژگی در نسخه 8.0 به حالت پیش‌فرض تبدیل خواهد شد.

مطمئن شوید فایل‌هایی که نادیده گرفته‌اید تنها فایل‌هایی هستند که دستکاری می‌شوند. از گزینه --why استفاده کنید تا دقیقاً ببینید کدام فایل‌ها تغییر کرده و باعث راه‌اندازی مجدد شده‌اند. برخی برنامه‌ها و کتابخانه‌ها فایل‌های موقتی ایجاد می‌کنند که ممکن است با یک الگوی نادیده‌گیری ساده مطابقت نداشته باشند.

همانند بالا، می‌توانید از فلگ --watch-when-idle نیز برای کمک استفاده کنید.

این مسئله گاهی در برخی تنظیمات ترمینال یا برای محیط‌های تست رخ می‌دهد. یک راه‌حل سریع (به جای درگیر شدن در رفع اشکال تنظیمات کنسول) ارسال گزینه --color=always به دستور است؛ به عنوان مثال:

$ cargo watch -x 'check --color=always'

برای دستورات test (و bench)، باید این فلگ را به جای cargo به برنامه زیرین ارسال کنید:

$ cargo watch -x 'test -- --color=always'

نوشته‌شده و نگهداری‌شده توسط Félix Saparelli.

https://passcod.name

صفحه اصلی پروژه:

https://watchexec.github.io/#cargo-watch

مالکیت عمومی (Public domain).

October 2024