Створення консольних додатків

Традиційний спосіб керування консольним додатком (CLI applications) - це передача параметрів з консольного рядка під час його запуску.

Скорочення CLI (command-line interface) перекладається як "інтерфейс командного рядка".

Передані параметри під час запуску скрипту доступні в масиві process.args:

terminal
["node", "/…/youscript.js", "param 1", "param 2", …]

Щоб одержати ці параметри треба виконати process.argv.slice(2), який поверне всі розділені пробілами параметри: ["param 1", "param 2", …]

Але обробляти комбінації параметрів та їх формати дуже незручно. Для цього використовують сторонні модулі. Один із найпопулярніших - commander або yargs.

Для початку ініціалізуємо проєкт:

terminal
npm init -y

Встановлюємо commander:

terminal
npm i commander

Щоб підсвічувати текст в консолі різними кольорами використовують або пакет colors або chalk.

terminal
npm i colors

Щоб використовувати інтерактивне введення в консолі на кшталт питання-відповідь, будемо використовувати стандартний модуль Node.js readline. Ініціалізація достатньо проста:

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin, // введення зі стандартного потоку
  output: process.stdout, // виведення у стандартний потік
});

Напишемо простий код програми, який приймає в консолі рядок, а потім виводить його:

У даному прикладі ми під'єднали модуль та створили екземпляр rl де в опціях передаємо потоки введення та виведення, консоль, файл і т.д. У нашому випадку ми беремо стандартні потоки та будемо працювати в консолі, де запускаємо скрипт. Обробка кожного введеного рядка відбувається через подію line.

Якщо хочемо використати пакет кольорів, щоб надати тексту певний колір треба передати його назву через крапку після рядка:

Щоб запустити цей скрипт треба виконати команду в консолі:

Утім після початку виконання коду ми з нього не виходимо. Для того, щоб вийти знову в командний рядок треба натиснути Ctrl +C.

Якщо хочемо автоматично закінчувати і закривати скрипт після виконання, то для цього є такий метод:

Але найцікавіше можливість поставити користувачеві питання та отримати на нього відповідь (аналогічна функції prompt із браузера):

Також при якійсь тривалій операції можна поставити розмову на паузу (заблокувати введення):

Щоб закрити інтерфейс readline, необхідно виконати функцію:

А тепер маючи необхідні знання - напишемо застосунок «Вгадай число». Генератор псевдовипадкових чисел "задумає" число від 1 до 10. Користувач буде вгадувати це число. Програма покаже з якої спроби вдалося вгадати число. І потім додамо можливість зберігати результати гри у файл.

Програма складається з головної функції гри, функції валідації введеного числа і функції запису результату в лог-файл. Для кольорового позначення тексту використано бібліотеку colors - достатньо через крапку вказати бажаний колір тексту.

Щоб запустити гру потрібно у терміналі виконати таку команду, де -f file.log вказує лог-файл куди будуть збережені результати гри.

Якщо ключ не вказати, то наші результати за замовчанням збережуться у файл game_results.txt.

Якщо вказати невалідний ключ, то буде повідомлення про помилковий ключ команди.

У коді повідомлення є такий текст \n - це перенесення "каретки" на новий рядок

Покликання:

NPM commander

NPM yargs

NPM colors

NPM chalk

Docs readline

Last updated