أطر CLI لجافا سكريبت (Node.js): إنشاء تطبيقات وحدة تحكم قوية
يعد تطوير واجهات سطر الأوامر (CLI) إحدى المهام الرئيسية في نظام Node.js البيئي. من البرامج النصية البسيطة إلى الأدوات المعقدة لـ DevOps، تحيط بنا تطبيقات CLI في كل مكان. ومع ذلك، فإن كتابة محلل وسائط، ومعالجة الأوامر الفرعية، وعرض المساعدة يدويًا هي مهمة شاقة وعرضة للأخطاء. وهنا تأتي أطر CLI لجافا سكريبت (Node.js) لمساعدتنا، حيث تتولى كل المهام الروتينية.
في هذه المقالة، سنقوم بتحليل أشهر إطارين بالتفصيل: Commander.js و Yargs. ستتعلم كيفية إنشاء تطبيقات CLI احترافية بسرعة مع دعم الوسائط والخيارات والإخراج الملون والتوليد التلقائي للمساعدة.
Commander.js - الكلاسيكية والبساطة
Commander.js هو الإطار الأكثر شهرة واستخدامًا على نطاق واسع لإنشاء CLI في Node.js. يتم استخدامه في مشاريع مثل Vue CLI و Angular CLI والعديد من المشاريع الأخرى. ميزته الرئيسية هي واجهة برمجة التطبيقات (API) البديهية القائمة على سلاسل الاستدعاءات.
التثبيت
npm install commanderمثال أساسي
const { Command } = require('commander');const program = new Command();
program .name('greet') .description('CLI للتحية') .version('1.0.0');
program .command('hello') .description('تحية المستخدم') .argument('<name>', 'اسم المستخدم') .option('-l, --language <lang>', 'لغة التحية', 'الروسية') .action((name, options) => { if (options.language === 'الإنجليزية') { console.log(`Hello, ${name}!`); } else { console.log(`Привет, ${name}!`); } });
program.parse(process.argv);في هذا المثال، أنشأنا الأمر greet hello الذي يقبل الوسيطة الإجبارية name والخيار الاختياري --language. سيقوم Commander تلقائيًا بإنشاء تعليمات للأمر --help.
دعم الأوامر الفرعية
يتعامل Commander بشكل ممتاز مع التسلسل الهرمي للأوامر. يمكنك إنشاء أوامر متداخلة، وهو أمر مفيد بشكل خاص للأدوات المعقدة:
const project = program.command('project');
project .command('init') .description('تهيئة المشروع') .action(() => { console.log('تمت تهيئة المشروع'); });
project .command('build') .description('بناء المشروع') .option('-p, --production', 'بناء الإنتاج') .action((options) => { console.log(options.production ? 'بناء الإنتاج' : 'بناء عادي'); });Yargs - المرونة والقوة
Yargs هو إطار قوي آخر يركز على تحليل الوسائط ويوفر إمكانيات مرنة للغاية. إنه جيد بشكل خاص عندما تحتاج إلى تحكم دقيق في سلوك المحلل، أو عندما تقوم ببناء واجهات معقدة متعددة المستويات.
التثبيت
npm install yargsمثال مع Yargs
const yargs = require('yargs/yargs');const { hideBin } = require('yargs/helpers');
const argv = yargs(hideBin(process.argv)) .command('serve [port]', 'تشغيل الخادم', (yargs) => { yargs .positional('port', { describe: 'منفذ الخادم', default: 3000 }); }, (argv) => { console.log(`الخادم يعمل على المنفذ ${argv.port}`); }) .option('verbose', { alias: 'v', type: 'boolean', description: 'إخراج مفصل' }) .example('$0 serve 8080', 'تشغيل الخادم على المنفذ 8080') .demandCommand(1, 'يجب تحديد أمر') .help() .argv;يقدم Yargs نهجًا أكثر تحديدًا لتعريف الأوامر. يمكنك تحديد الوسائط الموضعية بدقة، وتعيين قيم افتراضية لها، والتحقق من الأنواع، وغير ذلك الكثير.
التحقق من الصحة والأنواع
إحدى نقاط القوة