فصل ۱: مقدمه‌ای بر Live Reloading

Live Reloading چیست؟

Live Reloading ویژگی‌ای است که به محیط توسعه‌ی شما اجازه می‌دهد تا تغییرات در کدتان را نظارت کند و برنامه‌ی شما را به‌صورت خودکار مجدداً بارگذاری کند. زمانی که یک فایل را ذخیره می‌کنید، ابزار live reload تغییر را تشخیص می‌دهد، برنامه را مجدداً ساخته و آن را مجدداً راه‌اندازی می‌کند. این کار شما را از فرایند دستی توقف سرور، بازسازی برنامه و مجدداً راه‌اندازی آن بعد از هر تغییر نجات می‌دهد.

مزایای Live Reloading برای توسعه Go

Live Reloading می‌تواند پروسه‌ی توسعه را به‌طور قابل‌توجهی سریع‌تر کند. برای توسعه‌دهندگان Go که به کامپایل کردن کدشان قبل از اجرا عادت دارند، live reloading به معنی یک جریان کاری بهبود یافته با بازخورد فوری است. مزایا عبارتند از:

  1. افزایش بهره‌وری: توسعه‌دهندگان می‌توانند بدون وقفه در حالت the zone باقی بمانند، زیرا نیازی به اجرای مجدد دستی ندارند.
  2. صرفه‌جویی در زمان: Live Reloading زمان برای مشاهده تغییرات کد در برنامه در حال اجرا را کاهش می‌دهد.
  3. شناسایی خطا: بازسازی و راه‌اندازی فوری به توسعه‌دهندگان اجازه می‌دهد تا خطاها را سریع‌تر شناسایی و اصلاح کنند.
  4. جریان‌کاری بهینه‌شده: به‌طور یکپارچه وارد فرایند توسعه می‌شود و آن را نرم و کارآمدتر می‌کند.

فصل ۲: چیست Air؟

Air یک ابزار خط‌فرمانی است که برای ارائه قابلیت live reloading برای برنامه‌های Go طراحی شده است. این ابزار تغییرات در کد منبع شما را نظارت کرده و به‌صورت خودکار برنامه‌ی Go شما را مجدداً ساخته و راه‌ا‌ندازی می‌کند. این بدان معناست که می‌توانید بیشتر بر روی توسعه ویژگی‌ها تمرکز کرده و کمتر به کارهای تکراری اهمیت بدهید.

ویژگی‌ها

Air مجموعه‌ای از ویژگی‌های مناسب برای یک محیط توسعه‌ی Go مدرن ارائه می‌دهد:

  • ساخت‌های خودکار: تغییرات فایل را تشخیص داده و ساخت‌ها را فعال می‌کند.
  • فرمان‌های ساخت سفارشی: به شما امکان می‌دهد که فرمان‌های ساخت را برای نیازهای پروژه خود سفارشی‌سازی نمایید.
  • محدوده‌های دایرکتوری: به شما امکان می‌دهد دایرکتوری‌هایی را که می‌خواهید نظارت نشود مشخص نمایید.
  • پشتیبانی از دایرکتوری‌های جدید: می‌تواند دایرکتوری‌های جدید اضافه‌شده پس از اجرای Air را نظارت نماید.
  • گزینه‌های خط فرمان CLI: فیلدهای پیکربندی را می‌توانید مستقیماً از طریق آرگومان‌های خط فرمان ست کرده و به‌سرعت تنظیمات را تغییر دهید.

برای مطالعه‌ی متن ارائه شده توسط توسعه‌دهنده، به منظور مشاهده‌ی فهرست کامل از ویژگی‌ها و قابلیت‌های موجود در Air مراجعه نمایید.

فصل ۳: نصب air

3.1 نصب از طریق go install

برای نصب Air با استفاده از ابزار Go با نسخه 1.18 یا بالاتر:

go install github.com/cosmtrek/air@latest

این کار air را در GOPATH/bin شما قابل دسترس می‌کند.

3.2 استفاده از اسکریپت install.sh

روش دیگر از طریق اسکریپت نصب ارائه شده است:

curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

پس از نصب، آن را با اجرای دستور زیر تأیید نمایید:

air -v

3.3 نصب‌های ویژه (Docker/Podman و PATH سفارشی)

برای کسانی که از Docker یا Podman استفاده می‌کنند، روشی بهینه برای شامل کردن Air وجود دارد:

docker run -it --rm \
    -w "/path/to/project" \
    -v $(pwd):/path/to/project \
    -p port:port \
    cosmtrek/air

مسیر /path/to/project را با مسیر پروژه‌ی خود و port:port را با نگاشت پورت مورد نظر جایگزین نمایید.

به‌علاوه، برای یک نصب با PATH خاص:

curl -sSfL https://goblin.run/github.com/cosmtrek/air | PREFIX=/custom/path sh

فصل ۴: پیکربندی air برای پروژه‌ی Go شما

4.1 درک پیکربندی .air.toml

.air.toml فایل پیکربندی Air است. این اجازه را به شما می‌دهد تا تنظیمات مربوط به فرآیند ساخت، نظارت دایرکتوری و خروجی لاگ را مشخص نمایید. در زیر یک بررسی مختصر از بخش‌های کلیدی آمده است:

  • root: دایرکتوری کاری برای Air را تنظیم می‌کند.
  • build: شامل تنظیمات مرتبط با ساخت مانند فرمان‌های اجرا شده قبل/بعد از ساخت و فرمان ساخت اصلی.
  • tmp_dir: دایرکتوری‌ای که فایل‌های موقت ساخت در آن ذخیره می‌شوند.
  • log: تنظیمات فایل لاگ را پیکربندی می‌کند.
  • color: رنگ‌بندی سفارشی بخش‌های مختلف خروجی لاگ را مشخص می‌کند.

4.2 تولید و تغییر فایل پیکربندی

برای تولید یک فایل پیکربندی پیش‌فرض به نام .air.toml، دستور زیر را وارد کنید:

air init

این دستور یک فایل .air.toml با تنظیمات پیش‌فرض در دایرکتوری فعلی شما ایجاد می‌کند. سپس شما می‌توانید آن را تغییر دهید تا به نیازهای پروژه‌ی خود بخورد. به عنوان مرجع، می‌توانید به air_example.toml که در متن داده شده است مراجعه کنید.

4.3 دوگانگی پیکربندی با آرگومان‌های خط فرمان

برای تست‌های سریع یا تغییرات کوچک، می‌توانید پیکربندی در فایل .air.toml را با انتقال آرگومان‌های خط فرمان دوگانه (CLI) بازنویسی کنید. به عنوان مثال:

air --build.cmd "go build -o myapp" --build.bin "./myapp"

این امکان شما را قادر می‌سازد تا به راحتی رفتار Air را بدون تغییر فایل پیکربندی سفارشی کنید.

فصل 5: اجرای air در محیط توسعه شما

5.1 شروع air در پروژه شما

برای شروع با air در پروژه‌ی خود، به دایرکتوری اصلی پروژه‌ی خود در ترمینال بروید و دستور air را اجرا کنید. در صورتی که یک فایل پیکربندی .air.toml وجود داشته باشد، air به طور خودکار آن را استفاده می‌کند. در غیر این صورت، از تنظیمات پیش‌فرض استفاده خواهد کرد.

cd /path/to/your_project
air

نکته: اگر با مشکلات دسترسی به فایل قابل اجرای air روبه‌رو می‌شوید، اطمینان حاصل کنید که اجازه‌ی اجرا را دارد (chmod +x $(go env GOPATH)/bin/air).

5.2 سفارشی‌کردن دستورات بیلد و ران با air

شما می‌توانید دستورات بیلد و ران استفاده شده توسط air را با تغییر فایل پیکربندی .air.toml، به طور ویژه تحت بخش [build] سفارشی‌کنید. به عنوان مثال، برای تغییر دستور بیلد و مشخص کردن یک فایل باینری متفاوت:

[build]
cmd = "go build -o ./tmp/my-custom-binary ."
bin = "tmp/my-custom-binary"

برای نیازمندی‌های بیلد پیچیده‌تر، آرایه‌های pre_cmd و post_cmd در فایل پیکربندی به شما امکان می‌دهند تا دستوراتی قبل از و بعد از فرآیند بیلد را اجرا کنید به ترتیب.

نکته: نمونه‌ی کاملی از پیکربندی air

5.3 محدود کردن دایرکتوری‌ها و نظارت بر تغییرات

air همچنین به شما امکان می‌دهد تا دایرکتوری‌ها را از نظارت بر تغییرات مستثنی کنید که برای دایرکتوری‌های حاوی منابع یا وابستگی‌ها که نیاز به اجرای مجدد ندارند مفید است.

برای پیکربندی این مورد، فیلد exclude_dir را در فایل .air.toml به‌روز کنید:

[build]
exclude_dir = ["assets", "tmp", "vendor", "node_modules"]

همچنین می‌توانید include_dir را استفاده کنید تا دایرکتوری‌های اضافی را درگیر کنید و یا با include_ext برای پسوند فایل‌های خاص نظارت کنید.

فصل 6: استفاده‌ی پیشرفته

6.1 راه‌اندازی air با کانتینرهای Docker

استفاده از air در داخل یک کانتینر Docker می‌تواند تنظیم توسعه شما، به خصوص هنگام کار با تیم‌ها، را سریع‌تر کند. برای اضافه کردن air به محیط Docker خود، Dockerfile خود را بروز کنید تا air را نصب کند و فایل .air.toml خود را درون کانتینر کپی کند:

FROM golang:1.18-alpine AS builder

RUN go install github.com/cosmtrek/air@latest

WORKDIR /app

COPY go.mod .
COPY go.sum .
RUN go mod download

COPY . .

CMD ["air", "-c", ".air.toml"]

6.3 استفاده از air در یک محیط Docker-compose

برای یکپارچه‌سازی air در یک سرویس مدیریت شده توسط docker-compose، یک سرویس را در فایل docker-compose.yaml خود تعریف کنید:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "808:808"
    volumes:
      - .:/app
    command: ["air", "-c", ".air.toml"]

اطمینان حاصل کنید که دستورات volumes دستور را به درستی فضای کاری پروژه‌ی شما به دایرکتوری کاری درون کانتینر نقشه‌برداری می‌کند تا air بتواند تغییرات فایل را تشخیص دهد.

فصل 7: رفع مشکلات رایج و سوالات متداول

7.1 رفع خطا "command not found: air"

اگر با خطای "command not found: air" مواجه می‌شوید، معمولا به این معناست که فایل اجرایی air در مسیر PATH سیستم شما وجود ندارد. برای رفع این مشکل، مسیر Go binaries را به متغیر محیطی PATH خود اضافه کنید:

export PATH=$PATH:$(go env GOPATH)/bin

مشکلات در محیط‌های WSL

در محیط Windows Subsystem for Linux (WSL)، حتماً مطمئن شوید که کاراکترهای ویژه را در فایل .air.toml خود اسکیپ کرده‌اید. به عنوان مثال، از \\ برای اسکیپ کردن بک‌اسلش‌ها در مسیرهای فایل استفاده کنید.

نکات درباره کامپایل داغ بدون اجرای باینری

اگر می‌خواهید air برنامه Go خود را کامپایل کند اما اجرای آن را انجام ندهد، cmd را در بخش [build] فایل .air.toml خود به یک دستور بدون عملیات (مانند /bin/true در سیستم‌های مبتنی بر Unix) تنظیم کنید:

[build]
cmd = "/bin/true"

با انجام این کار، air همچنان تغییرات فایل‌ها را مشاهده کرده و فرآیند کامپایل را آغاز می‌کند، اما تلاشی برای اجرای فایل باینری نهایی انجام نخواهد داد.