Skip to content

قبول المدخلات من سطر الأوامر في Node.js

كيف تجعل برنامج Node.js لسطر الأوامر تفاعليًا؟

يوفر Node.js منذ الإصدار 7 وحدة readline لأداء هذا بالضبط: الحصول على الإدخال من دفق قابل للقراءة مثل دفق process.stdin، والذي يكون أثناء تنفيذ برنامج Node.js هو إدخال المحطة الطرفية، سطرًا واحدًا في كل مرة.

javascript
const readline = require('node:readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.question("What's your name?", name => {
    console.log('Hi ' + name + '!');
    rl.close();
});

تطلب هذه القطعة من التعليمات البرمجي اسم المستخدم، وبمجرد إدخال النص واضغط المستخدم على Enter، نرسل تحية.

تُظهر طريقة question() المعلمة الأولى (سؤال) وتنتظر إدخال المستخدم. تقوم باستدعاء دالة الاستدعاء مرة واحدة يتم الضغط على Enter.

في دالة الاستدعاء هذه، نقوم بإغلاق واجهة readline.

توفر readline العديد من الطرق الأخرى، يرجى التحقق منها في وثائق الحزمة المرتبطة أعلاه.

إذا كنت بحاجة إلى طلب كلمة مرور، فمن الأفضل عدم عرضها مرة أخرى، ولكن بدلاً من ذلك عرض رمز *.

أبسط طريقة هي استخدام حزمة readline-sync وهي مشابهة جدًا من حيث واجهة برمجة التطبيقات وتتعامل مع هذا خارج الصندوق. يتم توفير حل أكثر اكتمالًا وتجريدًا بواسطة حزمة Inquirer.js.

يمكنك تثبيته باستخدام npm install inquirer، ثم يمكنك تكرار التعليمات البرمجية أعلاه على النحو التالي:

javascript
const inquirer = require('inquirer');
const questions = [
    {
        type: 'input',
        name: 'name',
        message: "what's your name?"
    }
];
inquirer.prompt(questions).then(answers => {
    console.log('Hi ' + answers.name + '!');
});

يسمح لك Inquirer.js بالقيام بالعديد من الأشياء مثل طرح اختيارات متعددة، ووجود أزرار اختيار، وتأكيدات، وأكثر من ذلك.

يجدر معرفة جميع البدائل، خاصةً تلك المدمجة التي يوفرها Node.js، ولكن إذا كنت تخطط لأخذ إدخال سطر الأوامر إلى المستوى التالي، فإن Inquirer.js هو الخيار الأمثل.