ماژول REPL در Node.js

ماژول repl در Node.js یک محیط تعاملی Read-Eval-Print-Loop فراهم می‌کند که هم به‌صورت مستقل و هم درون برنامه‌ها قابل استفاده است. این محیط به توسعه‌دهندگان امکان می‌دهد کد جاوااسکریپت را خط‌به‌خط اجرا کنند، نتایج را مشاهده کنند، و با متغیرها و ماژول‌های داخلی تعامل داشته باشند. REPL از امکاناتی مانند تکمیل خودکار، تاریخچهٔ ورودی، و تعریف دستورات سفارشی پشتیبانی می‌کند.

repl.REPLServerSpecial commands (.break, .clear, .exit, .help, .save, .load, .editor)Events: exit, resetContext and global variables

~2 دقیقه مطالعه • بروزرسانی ۹ دی ۱۴۰۴

1. معرفی


ماژول repl با require('node:repl') بارگذاری می‌شود و کلاس REPLServer را ارائه می‌دهد. این کلاس ورودی‌ها را دریافت، آن‌ها را ارزیابی، و خروجی را چاپ می‌کند.


2. ویژگی‌ها


  • تکمیل خودکار ورودی‌ها.
  • ویرایش خط به سبک Emacs.
  • پشتیبانی از ورودی چندخطی.
  • جستجوی تاریخچه به سبک ZSH.
  • ذخیره و بارگذاری وضعیت جلسه.
  • پشتیبانی از ANSI رنگی.

3. دستورات ویژه


  • .break: توقف ورودی چندخطی.
  • .clear: پاک‌سازی context.
  • .exit: خروج از REPL.
  • .help: نمایش لیست دستورات.
  • .save: ذخیرهٔ جلسه در فایل.
  • .load: بارگذاری فایل در جلسه.
  • .editor: ورود به حالت ویرایشگر.

4. ارزیابی پیش‌فرض


به‌طور پیش‌فرض، REPL کد جاوااسکریپت را اجرا کرده و به ماژول‌های داخلی دسترسی می‌دهد. متغیرها در سطح global تعریف می‌شوند مگر اینکه در بلاک یا تابع باشند.


5. context و متغیرها


می‌توان متغیرها را به‌طور مستقیم در context اضافه کرد تا در REPL محلی باشند. همچنین امکان تعریف متغیرهای read-only با Object.defineProperty() وجود دارد.


6. مدیریت خطاها


  • استفاده از domain برای مدیریت خطاهای بدون مدیریت.
  • متغیر _ برای آخرین نتیجه و _error برای آخرین خطا.

7. پشتیبانی از await


REPL از await در سطح بالا پشتیبانی می‌کند، اما محدودیت‌هایی مانند بازتعریف متغیرهای const وجود دارد.


8. دستورات سفارشی


با defineCommand() می‌توان دستورات جدید با پیشوند "." تعریف کرد:


replServer.defineCommand('sayhello', {
  help: 'Say hello',
  action(name) {
    console.log(`Hello, ${name}!`);
  },
});

9. رویدادها


  • exit: هنگام خروج از REPL.
  • reset: هنگام پاک‌سازی context.

10. تاریخچه و تنظیمات


REPL تاریخچهٔ ورودی‌ها را در فایل .node_repl_history ذخیره می‌کند. می‌توان مسیر و اندازهٔ تاریخچه را با متغیرهای محیطی مانند NODE_REPL_HISTORY و NODE_REPL_HISTORY_SIZE تغییر داد.


11. نمونه‌های پیشرفته


  • اجرای REPL روی سوکت‌های TCP یا Unix.
  • اجرای REPL روی HTTP با استفاده از curl.

نتیجه‌گیری


ماژول repl یکی از ابزارهای قدرتمند Node.js برای توسعه و دیباگ است. با قابلیت‌های متنوعی مانند تکمیل خودکار، تاریخچه، پشتیبانی از await، و امکان تعریف دستورات سفارشی، REPL محیطی انعطاف‌پذیر برای آزمایش و تعامل با کد فراهم می‌کند.


نوشته و پژوهش شده توسط دکتر شاهین صیامی