Получение ввода с командной строки в Node.js
Как сделать интерактивную программу командной строки Node.js?
Node.js, начиная с версии 7, предоставляет модуль readline
для выполнения именно этой задачи: получения ввода из потока чтения, такого как поток process.stdin
, который во время выполнения программы Node.js является вводом с терминала, построчно.
const readline = require('node:readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("Как вас зовут?", name => {
console.log('Привет, ' + name + '!');
rl.close();
});
Этот фрагмент кода запрашивает имя пользователя, и как только текст введен, и пользователь нажимает Enter, мы отправляем приветствие.
Метод question()
показывает первый параметр (вопрос) и ожидает ввода от пользователя. Он вызывает функцию обратного вызова после нажатия Enter.
В этой функции обратного вызова мы закрываем интерфейс readline
.
readline
предлагает несколько других методов, пожалуйста, ознакомьтесь с ними в документации по пакету, ссылка на которую приведена выше.
Если вам нужно запросить пароль, лучше не выводить его на экран, а вместо этого показывать символ *.
Простейший способ — использовать пакет readline-sync
, который очень похож по API и обрабатывает это "из коробки". Более полное и абстрактное решение предоставляется пакетом Inquirer.js.
Вы можете установить его с помощью npm install inquirer
, а затем можете воспроизвести приведенный выше код следующим образом:
const inquirer = require('inquirer');
const questions = [
{
type: 'input',
name: 'name',
message: "Как вас зовут?"
}
];
inquirer.prompt(questions).then(answers => {
console.log('Привет, ' + answers.name + '!');
});
Inquirer.js
позволяет делать много вещей, таких как запрос множественного выбора, наличие переключателей, подтверждений и многое другое.
Стоит знать все альтернативы, особенно встроенные, предоставляемые Node.js, но если вы планируете вывести ввод CLI на новый уровень, Inquirer.js
— оптимальный выбор.