استفاده از nodemon در 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
| ویژگی | nodemon | PM2 |
|---|---|---|
| هدف | توسعه محلی، ریاستارت خودکار در تغییر فایل | مدیریت فرآیندها در تولید و توسعه، 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) را نیز ارائه داد.
آیا این مطلب برای شما مفید بود ؟




