تعرف على كيفية إنشاء برنامج بواجهة سطر أوامر قياسية باستخدام هذه المكتبة المفيدة.
تطبيقات CLI (واجهة سطر الأوامر) هي تطبيقات نصية مبسطة يتم تشغيلها في الجهاز لإكمال مهام محددة. تلعب تطبيقات CLI دورًا حاسمًا في سير العمل لكل مطور ومتخصص في تكنولوجيا المعلومات تقريبًا.
وهي في الغالب أدوات مساعدة تتفاعل مع نظام التشغيل أو التطبيقات التي تكون كذلك مثبتة محليًا أو متاحة عبر الإنترنت لأداء مهمة وفقًا لإدخال المستخدم و التوجيهات.
فهم تطبيقات CLI
تتيح لك واجهة سطر الأوامر التفاعل مع البرنامج عن طريق كتابة أسطر من النص. تعمل العديد من برامج CLI بشكل مختلف اعتمادًا على الأمر الذي تستخدمه لبدء تشغيلها.
على سبيل المثال، يعرض برنامج ls معلومات الملف ومحتويات الدلائل. يمكنك تشغيله مثل هذا:
ls -l /home
يتضمن هذا الأمر:
- اسم البرنامج: ليرة سورية.
- خيار (أو علم). في هذه الحالة، -ل هو خيار قصير لـ "طويل" وينتج معلومات أكثر تفصيلاً.
- حجة، /home. هنا، تحدد الوسيطة مسارًا إلى الدليل لإظهار المعلومات الخاصة به.
في حين أن كل برنامج قد يحدد واجهة سطر الأوامر الخاصة به، إلا أن بعض العناصر شائعة ومستخدمة على نطاق واسع. يجب عليك اتباع هذه المعايير حتى يتمكن أي شخص على دراية بواجهة سطر الأوامر من استخدام برامجك بسهولة.
ما هو Commander.js؟
Commander.js هو حزمة تتيح لك إنشاء تطبيقات CLI في Node.js. يحتوي على مكتبة غنية من الميزات التي تتيح لك إنشاء تطبيق CLI قياسي، وتنفيذ الكثير من العمل الشاق. ما عليك سوى تحديد الأوامر والخيارات والوظائف لتطبيق CLI الخاص بك.
ومن خلال دمجه مع الحزم الأخرى مثل Chalk.js للتصميم، يمكنك بسرعة إنشاء تطبيق CLI كامل الوظائف في Node.js.
بناء تطبيق CLI في Node.js باستخدام Commander.js
خذ بعين الاعتبار مثال تطبيق CLI، حضري-cli, الذي يبحث عن معنى الكلمات ومختصرات وسائل التواصل الاجتماعي القاموس الحضري. ستتعلم كيفية إنشاء واجهة سطر الأوامر (CLI) ونشرها على npm سجل الحزمة حتى يتمكن الآخرون من تثبيته.
أنشئ مجلدًا جديدًا وقم بتهيئة مشروع Node.js جديد باستخدام الأوامر التالية:
mkdir urbanary-cli
cd urbanary-cli
npm init -y
سوف يستخدم هذا CLI أكسيوس لإرسال طلبات HTTP إلى واجهة برمجة تطبيقات القاموس الحضري. يمكنك استخدام واجهة برمجة التطبيقات السريعة للتحقق من نقاط النهاية وعرض بيانات الاعتماد.
واجهة سطر أوامر (CLI) بسيطة مع أمر فرعي ومساعدة
لبدء إنشاء واجهة سطر الأوامر (CLI)، قم بتثبيت Commander وAxios باستخدام الأمر التالي:
npm install commander axios
انشاء مجلد جديد، سلة مهملات، في دليل المشروع الخاص بك وملف فارغ جديد، Index.js:
mkdir bin
cd bin
touch index.js
ال سلة مهملات يعد المجلد (اختصار لـ "binary") مهمًا لأنه يحتوي على ملف نقطة الإدخال الذي تستدعيه Node عند تشغيل CLI الخاص بك. ال Index.js الملف هو ملف نقطة الإدخال هذا. الآن، قم بتحرير ملف Index.js وابدأ في إنشاء واجهة سطر الأوامر (CLI) الخاصة بك باستخدام واجهة برمجة تطبيقات Commander.js.
أولاً، قم باستيراد برنامج كائن من القائد:
const { program } = require('commander');
سوف تستخدم برنامج كائن لتحديد واجهة برنامجك، بما في ذلك الأوامر الفرعية والخيارات والوسائط. يحتوي الكائن على الأساليب المقابلة لكل من هذه؛ على سبيل المثال، لتحديد أمر فرعي، استخدم الأمر يأمر طريقة.
تعريف أ يجد أمر فرعي لـ CLI للبحث عن الكلمات من Urban Dictionary وإضافة وصف لها باستخدام الكود أدناه:
// index.js
program
.command('find ' )
.description('find meaning of a word or abbreviation or slang')
هذا يسجل أ يجد أمراً يتوقع كلمة بعده ووصفاً له. استخدام الأقواس الزاوية يدل على أن الكلمة هي وسيطة مطلوبة؛ استخدم الأقواس المربعة بدلاً من ذلك ([]) لجعلها اختيارية.
يجب عليك إضافة وصف لأن Commander.js يستخدمه لإنشاء نص تعليمات. عند تشغيل التطبيق باستخدام يساعد الأمر، سوف تحصل على دليل الاستخدام القياسي.
لاختبار ذلك أضف ما يلي:
program.parse()
ثم قم بتشغيل البرنامج وتمريره يساعد الأمر للحصول على الإخراج أدناه:
هذه هي الطريقة التي سيعرض بها أي تطبيق CLI قياسي مساعدته للمستخدمين، ومع Commander، لا داعي للقلق بشأن إنشائها بنفسك. ال -ح و --يساعد تعتبر الخيارات مفيدة للتحقق من دليل الاستخدام لأحد الأوامر.
تحديد الخيارات وإعداد البرنامج النهائي
يمكنك أيضًا تحديد خيار عن طريق تسلسل خيار طريقة تعريف الأمر.
إليك كيفية تحديد خيار لتضمين أمثلة في تعريفات الكلمات:
program.option('-e, --example', "Display examples")
وإليك كيفية تحديد خيار يحدد عدد التعريفات المطلوب إرجاعها:
program.option(
'-c, --count [amount]',
'amount of definitions to display (max is 10)'
)
ال خيار تقبل الطريقة معلمتين من السلسلة، واحدة لاسم الخيار (النموذجين القصير والطويل)، والأخرى لوصفه. اضافية [كمية] حجة في عدد الخيار هو قيمة عدد التعريفات المراد عرضها.
الآن، الطريقة الأخيرة للإضافة هي فعل طريقة. سوف تقوم بتنفيذ يجد وظيفة الأمر ضمن هذه الطريقة. قم بإضافته إلى السلسلة بحيث يبدو الكود الخاص بك الآن كما يلي:
program
.command('find ' )
.description('find meaning of a word or abbreviation or slang')
.option('-e, --example', "Display examples")
.option(
'-c, --count [amount]',
'amount of definitions to display (max is 10)'
)
.action(async (word, options) => {});
مع هذا الإعداد، إليك الأمر للحصول على ثلاثة تعريفات لها مضحك جداً مع الأمثلة سوف تبدو كما يلي:
urbanary-cli find lol -e -c 3
أو باستخدام النموذج الطويل لكل خيار:
urbanary-cli find lol --example --count 3
الدفع صفحة القائد npm لمعرفة المزيد عنها وكيفية تكييف وظائفها مع حالات الاستخدام المختلفة.
تنفيذ وظائف البرنامج
أولاً، قم باستيراد Axios إلى جهازك Index.js الملف على النحو التالي:
const axios = require('axios');
ثم في الجسم الوظيفي فعلالمعلمة، يمكنك تنفيذ المنطق لتقديم طلبات إلى Urban Dictionary وعرض النتائج وفقًا لخياراتك.
ابدأ بتحديد طلبك:
let requestOptions = {
method: 'GET',
URL: "https://mashape-community-urban-dictionary.p.rapidapi.com/define",
params: { term: word },
headers: {
'X-RapidAPI-Key': YOUR_RAPID_API_KEY,
'X-RapidAPI-Host': 'mashape-community-urban-dictionary.p.rapidapi.com'
}
}
ثم قم بتقديم الطلب إلى واجهة برمجة التطبيقات (API) باستخدام Axios باستخدام الكود التالي:
try {
let resp = await axios.request(requestOptions);
console.log(`Definitions for ${word} fetched`);
wordData = resp.data.list;
} catch (err) {
console.error(err.message)
}
الخاصية الوحيدة التي تحتاجها من بيانات الاستجابة هي قائمة الخاصية التي تحمل التعاريف والأمثلة.
لا يزال في يحاول كتلة، أضف هذا المنطق للتعامل مع الخيارات وعرض النتائج كما يلي:
if (options.example && options.count) {
let cnt = 1;
let definitions = wordData.slice(0, options.count);definitions.forEach((elem) => {
console.log(`Definition ${cnt++}: ${elem.definition}`);
console.log(`Example:\n${elem.example}\n`);
});
} elseif (options.count && !options.example) {
let cnt = 1;
let definitions = wordData.slice(0, options.count);
definitions.forEach((elem) => {
console.log(`Definition ${cnt++}: ${elem.definition}`);
});
} elseif (options.example) {
console.log(`Definition: ${wordData[0].definition}`);
console.log(`Example:\n${wordData[0].example}`);
} else {
console.log(`Definition: ${wordData[0].definition}`);
}
يقوم هذا الرمز بتقييم وسيطات الأمر باستخدام عبارات if-else لتحديد كيفية عرض الإخراج. إذا مثال و عدد يتم تمرير الخيارات، فإنه يتكرر من خلال wordData ويطبع العدد المحدد من التعريفات والأمثلة معهم.
إذا كنت تمر فقط عدديعرض هذا القدر من التعريفات بدون أمثلة. إذا كنت تمر فقط مثال، فإنه يعرض تعريفًا واحدًا مع جملة مثال. ال آخر البيان هو السلوك الافتراضي لطباعة التعريف فقط إذا لم تقم بتمرير أي خيارات.
التطبيق جاهز الآن، لذا فإن الخطوة التالية هي جعله قابلاً للتنفيذ. ابدأ بإضافة خط شيبانج إلى بداية ملف bin/index.js الخاص بك بحيث يمكنك تشغيله كبرنامج نصي مستقل:
#!/usr/bin/env node
بعد ذلك، افتح جهازك package.json الملف، قم بتحرير قيمة رئيسي الملكية، وإضافة أ سلة مهملات الملكية بعد ذلك هكذا:
"main": "./bin/index.js",
"bin": {
"urbanary-cli": "./bin/index.js"
},
المفتاح Urbanary-cli، تحت سلة مهملات هو الأمر الذي ستدخله في جهازك الطرفي لتشغيل تطبيقك. لذا، تأكد من استخدام اسم مناسب عند إنشاء تطبيقات سطر الأوامر الخاصة بك.
يجري تثبيت npm -g لتثبيت التطبيق عالميًا، وستكون قادرًا على تنفيذ التطبيق كأمر من جهازك الطرفي.
توضح الصورة أدناه عملية التثبيت وأمر اختبار للعثور على معنى lmk:
يمكنك أيضًا نشره في سجل حزمة npm عن طريق التشغيل نشر npm في المحطة داخل دليل المشروع. وهذا يجعلها قابلة للتثبيت من قبل أي شخص من أي مكان يستخدمه تثبيت npm.
من الأسهل إنشاء تطبيقك ونشره باستخدام Node.js، مقارنة بوقت إنشاء تطبيقك إنشاء CLIs باستخدام تقنيات مثل Rust.
أنشئ تطبيقات CLI وظيفية باستخدام Node.js
سواء كنت تعمل على حزمة npm وتحتاج إلى أداة مساعدة لواجهة سطر الأوامر (CLI) لمرافقتها، أو كنت ترغب فقط في إنشاء أداة لتحسين سير عملك كمطور. لديك كل ما تحتاجه لإضفاء الحيوية على فكرتك مع حزمة Node.js Commander.
يمكنك أيضًا المضي قدمًا باستخدام مكتبات أخرى لإنشاء تجارب CLI محسنة لتطبيقاتك، Node.js قوي بما يكفي لخدمة أغراضك دون الكثير من المتاعب.