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("Как вас зовут?", name => {
    console.log('Привет, ' + name + '!');
    rl.close();
});

Этот фрагмент кода запрашивает имя пользователя, и как только текст введен, и пользователь нажимает Enter, мы отправляем приветствие.

Метод question() показывает первый параметр (вопрос) и ожидает ввода от пользователя. Он вызывает функцию обратного вызова после нажатия Enter.

В этой функции обратного вызова мы закрываем интерфейс readline.

readline предлагает несколько других методов, пожалуйста, ознакомьтесь с ними в документации по пакету, ссылка на которую приведена выше.

Если вам нужно запросить пароль, лучше не выводить его на экран, а вместо этого показывать символ *.

Простейший способ — использовать пакет readline-sync, который очень похож по API и обрабатывает это "из коробки". Более полное и абстрактное решение предоставляется пакетом Inquirer.js.

Вы можете установить его с помощью npm install inquirer, а затем можете воспроизвести приведенный выше код следующим образом:

javascript
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 — оптимальный выбор.