ویژگی تصویر

استفاده از nodemon در Node.js — راهنمای جامع

  /  Node.js   /  استفاده از nodemon در Node.js
بنر تبلیغاتی الف
NodeJS - Node.js

Nodemon ابزاری ساده و در عین حال بسیار کاربردی برای توسعه‌دهندگان Node.js است که به صورت خودکار برنامهٔ شما را هنگام تغییر فایل‌ها ری‌استارت می‌کند. این ابزار روند توسعه را سرعت می‌بخشد و نیاز به ری‌استارت دستی سرور در هر تغییر کوچک را حذف می‌کند. در این مقاله به نصب، پیکربندی‌های متداول، مثال‌های عملی و نکات حرفه‌ای در استفاده از nodemon می‌پردازیم.

چرا از nodemon استفاده کنیم؟

  • افزایش سرعت توسعه — نیازی به اجرای مجدد دستی سرور پس از هر تغییر نیست.
  • پیکربندی قابل‌تنظیم — می‌توانید فایل‌ها/پسوندها را مشخص یا نادیده بگیرید و فرمان اجرا را تغییر دهید.
  • پشتیبانی از زبان‌های تراسپایل‌شده — مانند TypeScript یا Babel با گزینهٔ --exec.
  • ابزاری برای توسعه محلی، نه محیط تولید — nodemon برای توسعه طراحی شده و نباید در پروسهٔ پروداکشن استفاده شود.

نصب و اجرای سریع

npm install --save-dev nodemon
# یا نصب سراسری
npm install -g nodemon

این دستور nodemon را به عنوان وابستگی توسعه نصب می‌کند. نصب سراسری برای استفاده در چند پروژه مناسب است، اما معمولاً بهتر است آن را به‌عنوان devDependency ذخیره کنید تا تیم پروژه هم نسخهٔ یکسانی داشته باشد.

تعریف اسکریپت در package.json

{
  "name": "my-app",
  "version": "1.0.0",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js"
  },
  "devDependencies": {
    "nodemon": "^2.0.0"
  }
}

با تعریف اسکریپت dev می‌توانید با اجرای npm run dev سرور را با nodemon اجرا کنید. این روش تضمین می‌کند همهٔ اعضای تیم از همان دستور استفاده کنند.

گزینه‌های خط فرمان پرکاربرد

  • nodemon app.js — اجرای ساده
  • nodemon --watch src --ext js,json — نظارت فقط روی پوشهٔ مشخص و پسوندهای معین
  • nodemon --ignore public/ — نادیده گرفتن پوشهٔ مشخص
  • nodemon --exec "node --inspect" index.js — اجرای با گزینه‌های دلخواه

فایل پیکربندی nodemon.json

{
  "watch": ["src"],
  "ext": "js,json",
  "ignore": ["src/tests/*", "public/*"],
  "exec": "node ./src/server.js",
  "delay": "2500"
}

این فایل در ریشهٔ پروژه قرار می‌گیرد و تنظیمات پیش‌فرض nodemon را تغییر می‌دهد. در این مثال تنها پوشهٔ src نظارت می‌شود، تاخیر راه‌اندازی مجدد 2.5 ثانیه است و فایل‌های تست و public نادیده گرفته می‌شوند.

مثال عملی: استفاده با Express

// index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello nodemon!'));
app.listen(3000, () => console.log('Server running on port 3000'));

کد بالا یک سرور سادهٔ Express را تعریف می‌کند. با اجرای nodemon index.js پس از هر تغییر در فایل، سرور به‌صورت خودکار ری‌استارت می‌شود و پیام لاگ ری‌استارت در کنسول نمایش داده می‌شود.

استفاده با TypeScript

npm install --save-dev ts-node typescript nodemon

# package.json script
"dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts"

در پروژه‌های TypeScript می‌توانید از ts-node برای اجرای مستقیم فایل‌های TS استفاده کنید. در این مثال nodemon فقط فایل‌های .ts داخل src را زیرنظر می‌گیرد و با ts-node اجرا می‌کند.

نکات و ترفندهای حرفه‌ای

  • در ویندوز یا محیط‌های شبکه‌شده اگر تغییرات را شناسایی نکرد، از --legacy-watch استفاده کنید تا از مکانیزم polling بهره ببرد.
  • برای کاهش ری‌استارت‌های زائد، فایل‌هایی مثل لاگ و پوشهٔ node_modules را در ignore قرار دهید.
  • برای خواندن متغیرهای محیطی متفاوت در ری‌استارت‌ها از فایل‌های مجزا مانند .env و پکیج‌های dotenv استفاده کنید.
  • nodemon مناسب محیط توسعه است؛ برای تولید از ابزارهای مدیریت فرآیند مثل PM2 یا systemd استفاده کنید.

مقایسهٔ کوتاه: nodemon در برابر PM2

ویژگیnodemonPM2
هدفتوسعه محلی، ری‌استارت خودکار در تغییر فایلمدیریت فرآیندها در تولید و توسعه، load balancing
استقرار تولیدخیربله
پیکربندی فایل‌هاساده (nodemon.json)قوی (ecosystem file)

خطاهای رایج و راه‌حل‌ها

  • عدم شناسایی تغییرات: از --legacy-watch یا افزایش منابع I/O استفاده کنید.
  • ری‌استارت مکرر به دلیل فایل‌های لاگ: مسیرهای لاگ را در ignore قرار دهید.
  • مشکلات با exec سفارشی: از кавیِم‌های مناسب (single/double quotes) و escape صحیح در ویندوز استفاده کنید.

جمع‌بندی و بهترین شیوه‌ها

nodemon ابزاری الزامی برای توسعه‌دهندگان Node.js است که باعث افزایش سرعت و راحتی در فرایند توسعه می‌شود. از آن برای محیط توسعه استفاده کنید، پیکربندی‌های مربوطه را در nodemon.json یا اسکریپت‌های package.json قرار دهید، و هنگام کار با تراسپایلرها مثل TypeScript یا Babel از گزینهٔ --exec بهره ببرید. به یاد داشته باشید که nodemon برای تولید طراحی نشده و در محیط پروداکشن بهتر است از ابزارهای مدیریت فرآیند حرفه‌ای استفاده شود.

در صورت نیاز می‌توان مثال‌های بیشتر (مثل استفاده در کانتینر Docker، اجرای تست‌ها با nodemon یا ادغام با ابزارهای CI) را نیز ارائه داد.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: