Commander.js: إنشاء تطبيقات وحدة تحكم قوية على Node.js
في عالم تطوير الويب الحديث والأتمتة، تلعب تطبيقات وحدة التحكم (CLI) دورًا رئيسيًا. فهي تتيح أتمتة المهام الروتينية، وإدارة المشاريع، ونشر الكود، والتفاعل مع API دون استخدام واجهة رسومية. إذا كنت تكتب بلغة جافا سكريبت (Node.js)، فإن أفضل خيار لإنشاء أدوات CLI أنيقة ووظيفية هو إطار العمل Commander.js.
Commander.js هي مكتبة خفيفة الوزن ولكنها قوية بشكل لا يصدق، تتولى جميع المهام الروتينية لتحليل وسائط سطر الأوامر، وتوليد التعليمات، ومعالجة الأخطاء. بمساعدتها، يمكنك تحويل سكريبت بسيط إلى تطبيق وحدة تحكم احترافي يدعم الأوامر الفرعية والخيارات والتحقق التلقائي. في هذه المقالة، سنشرح بالتفصيل كيفية استخدام Commander.js على الموقع التعليمي pythonlib.ru لإنشاء أدوات CLI الخاصة بك.
التثبيت والاستخدام الأساسي
قبل البدء، تأكد من تثبيت Node.js (الإصدار 12 وما فوق). يتم تثبيت Commander.js عبر npm:
npm install commanderبعد التثبيت، قم بإنشاء ملف cli.js وقم بتضمين المكتبة. لنلق نظرة على مثال بسيط — تطبيق يطبع "Hello, World!" ويقبل اسم المستخدم.
#!/usr/bin/env nodeconst { Command } = require('commander');const program = new Command();
program .name('greet') .description('يطبع تحية') .version('1.0.0');
program .command('hello') .description('يرحب بالمستخدم') .argument('<name>', 'اسم المستخدم') .action((name) => { console.log(`مرحبًا، ${name}! أهلاً بك في Commander.js.`); });
program.parse(process.argv);الآن قم بتشغيل السكريبت:
node cli.js hello إيفانسترى: مرحبًا، إيفان! أهلاً بك في Commander.js.
الإمكانيات الرئيسية لـ Commander.js
يوفر Commander.js مجموعة غنية من الوظائف لإنشاء تطبيقات CLI احترافية. دعنا نستعرضها بالتفصيل.
1. الأوامر والأوامر الفرعية
يمكنك إنشاء عدد غير محدود من الأوامر (مثل init، build، deploy) وتداخلها داخل بعضها البعض. هذا مفيد بشكل خاص للأدوات المعقدة مثل مديري الحزم أو أدوات تجميع المشاريع.
program .command('init') .description('يهيئ مشروعًا جديدًا') .option('-t, --template <type>', 'قالب المشروع (basic, advanced)') .action((options) => { console.log(`إنشاء مشروع بالقالب: ${options.template || 'basic'}`); });2. الخيارات (الأعلام)
تتيح الخيارات للمستخدم تمرير معاملات إضافية. يدعم Commander.js الأعلام القصيرة (-v) والطويلة (--verbose)، بالإضافة إلى القيم الإلزامية والاختيارية.
program .option('-d, --debug', 'تفعيل وضع التصحيح') .option('-p, --port <number>', 'منفذ الخادم', '3000') // قيمة افتراضية .parse(process.argv);
if (program.opts().debug) { console.log('تم تفعيل التصحيح');}3. وسائط الأوامر
الوسائط هي معاملات موضعية يمررها المستخدم بعد الأمر. يمكن أن تكون إلزامية (<name>) أو اختيارية ([name]).
program .command('copy <source> [destination]') .description('ينسخ ملفًا من source إلى destination') .action((source, destination) => { console.log(`نسخ من ${source} إلى ${destination || 'المجلد الحالي'}`); });4. التعليمات التلقائية وإدارة الإصدارات
يقوم Commander.js تلقائيًا بتوليد التعليمات عند استخدام العلم --help أو