إنشاء أدوات CLI في Node.js: نظرة عامة على أطر العمل Commander و Yargs و Inquirer

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إطار عمل CLI للغة JavaScript (Node.js): إنشاء تطبيقات سطر أوامر قوية



يعد تطوير أدوات سطر الأوامر (CLI) إحدى المهام الرئيسية في نظام Node.js البيئي. سواء كان الأمر يتعلق بأتمتة البناء، أو إدارة الحزم، أو إنشاء الأكواد، أو البرامج النصية البسيطة لـ DevOps - لا يمكن الاستغناء عن إطار عمل CLI عالي الجودة. في هذه المقالة، سنحلل أشهر ثلاث أدوات: Commander و Yargs و Inquirer. ستتعرف على كيفية عملها، وما هي نقاط قوتها، وسترى أمثلة على الأكواد.



لماذا نحتاج إلى إطار عمل CLI؟

يمكن كتابة برنامج سطر أوامر بسيط بدون إطار عمل - فقط قم بمعالجة process.argv. ولكن بمجرد أن يكبر المشروع، وتظهر الأوامر الفرعية، والخيارات، والتلميحات التفاعلية - يصبح التحليل اليدوي للوسائط كابوسًا. تتولى أطر العمل المهام التالية:

  • تحليل الوسائط والخيارات;
  • إنشاء المساعدة (--help);
  • التحقق من صحة البيانات المدخلة;
  • دعم الأوامر الفرعية (كما في git);
  • الحوارات التفاعلية مع المستخدم.


Commander - الكلاسيكي والمعيار

Commander هو إطار عمل CLI الأكثر شيوعًا لـ Node.js. تستخدمه عمالقة مثل Vue CLI و NestJS والعديد غيرهم. الميزات الرئيسية: واجهة برمجة تطبيقات بديهية، عرض تلقائي للمساعدة، دعم الوسائط المتغيرة.



مثال على تطبيق بسيط:

#!/usr/bin/env nodeconst { Command } = require('commander');const program = new Command();

program .name('greet') .description('تحية المستخدم') .version('1.0.0');

program .command('hello') .argument('<name>', 'اسم المستخدم') .option('-l, --lang <language>', 'لغة التحية', 'ru') .action((name, options) => { if (options.lang === 'ru') { console.log(`مرحبًا، ${name}!`); } else { console.log(`Hello, ${name}!`); } });

program.parse();


التشغيل: node app.js hello Ivan --lang ru → مرحبًا، Ivan!



يقوم Commander تلقائيًا بإنشاء المساعدة باستخدام --help ويدعم سلاسل الاستدعاء. هذا هو الخيار المثالي لمعظم أدوات CLI.



Yargs - المرونة والراحة

Yargs هو إطار عمل قوي آخر، يتميز بقوته بشكل خاص في تحليل الخيارات المعقدة والتحديد التلقائي للأنواع. وهو شائع بين المطورين الذين يحتاجون إلى تحكم دقيق في الوسائط.



مثال باستخدام Yargs:

#!/usr/bin/env nodeconst yargs = require('yargs/yargs');const { hideBin } = require('yargs/helpers');

const argv = yargs(hideBin(process.argv)) .command('calc', 'آلة حاسبة', (yargs) => { return yargs .option('a', { describe: 'الرقم الأول', type: 'number', demandOption: true }) .option('b', { describe: 'الرقم الثاني', type: 'number', demandOption: true }) .option('op', { describe: 'العملية (sum, sub)', type: 'string', default: 'sum' }); }, (argv) => { const { a, b, op } = argv; if (op === 'sum') console.log(`المجموع: ${a + b}`); else if (op === 'sub') console.log(`الفرق: ${a - b}`); else console.log('عملية غير معروفة'); }) .demandCommand(1, 'حدد الأمر') .help() .argv;


يمكن لـ Yargs تحويل السلاسل النصية تلقائيًا إلى أرقام وقيم منطقية وحتى مصفوفات. يسمح نظام middleware القوي الخاص به بإضافة فحوصات عامة لجميع الأوامر.



Inquirer - التفاعلية في الطرفية

Inquirer ليس إطار عمل CLI بالكامل، بل هو مكتبة لإنشاء واجهات سطر أوامر تفاعلية. إنه يكمل Commander أو Yargs بشكل مثالي عندما تكون هناك حاجة إلى أسئلة مع اختيارات، أو إدخال نص، أو مربعات اختيار.



مثال على استبيان تفاعلي:

const inquirer = require('inquirer');

async function main() { const answers = await inquirer.prompt([ { type: 'inp

توصيات