Создание CLI-инструментов на Node.js: обзор фреймворков Commander, Yargs и Inquirer

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

CLI фреймворк для JavaScript (Node.js): создаём мощные консольные приложения

Разработка консольных (CLI) утилит — одна из ключевых задач в экосистеме Node.js. Будь то автоматизация сборки, управление пакетами, генерация кода или простые скрипты для DevOps — без качественного CLI-фреймворка не обойтись. В этой статье мы разберём три самых популярных инструмента: Commander, Yargs и Inquirer. Вы узнаете, как они работают, в чём их сильные стороны, и увидите примеры кода.

Зачем нужен CLI фреймворк?

Написать простую консольную программу можно и без фреймворка — достаточно обработать process.argv. Но как только проект разрастается, появляются подкоманды, флаги, интерактивные подсказки — ручное парсинг аргументов становится адом. Фреймворки берут на себя:

  • парсинг аргументов и опций;
  • генерацию справки (--help);
  • валидацию входных данных;
  • поддержку подкоманд (как в git);
  • интерактивные диалоги с пользователем.

Commander — классика и стандарт

Commander — самый популярный CLI-фреймворк для Node.js. Его используют такие гиганты, как Vue CLI, NestJS и многие другие. Основные фишки: интуитивный API, автоматический вывод справки, поддержка вариативных аргументов.

Пример простого приложения:

#!/usr/bin/env node
const { Command } = require('commander');
const program = new Command();

program
  .name('greet')
  .description('Приветствие пользователя')
  .version('1.0.0');

program
  .command('hello')
  .argument('<name>', 'Имя пользователя')
  .option('-l, --lang <language>', 'Язык приветствия', 'ru')
  .action((name, options) => {
    if (options.lang === 'ru') {
      console.log(`Привет, ${name}!`);
    } else {
      console.log(`Hello, ${name}!`);
    }
  });

program.parse();

Запуск: node app.js hello Иван --lang ru → Привет, Иван!

Commander автоматически генерирует справку по --help и поддерживает цепочки вызовов. Это идеальный выбор для большинства CLI-утилит.

Yargs — гибкость и удобство

Yargs — ещё один мощный фреймворк, который особенно силён в парсинге сложных опций и автоматическом определении типов. Он популярен в среде разработчиков, которым нужен тонкий контроль над аргументами.

Пример с Yargs:

#!/usr/bin/env node
const yargs = require('yargs/yargs');
const { hideBin } = require('yargs/helpers');

const argv = yargs(hideBin(process.argv))
  .command('calc', 'Калькулятор', (yargs) => {
    return yargs
      .option('a', { describe: 'Первое число', type: 'number', demandOption: true })
      .option('b', { describe: 'Второе число', type: 'number', demandOption: true })
      .option('op', { describe: 'Операция (sum, sub)', type: 'string', default: 'sum' });
  }, (argv) => {
    const { a, b, op } = argv;
    if (op === 'sum') console.log(`Сумма: ${a + b}`);
    else if (op === 'sub') console.log(`Разность: ${a - b}`);
    else console.log('Неизвестная операция');
  })
  .demandCommand(1, 'Укажите команду')
  .help()
  .argv;

Yargs умеет автоматически конвертировать строки в числа, булевы значения и даже массивы. Его мощная система middleware позволяет добавлять общие проверки для всех команд.

Inquirer — интерактивность в терминале

Inquirer — это не совсем фреймворк для CLI, а скорее библиотека для создания интерактивных консольных интерфейсов. Она идеально дополняет Commander или Yargs, когда нужны вопросы с выбором, ввод текста, чекбоксы.

Пример интерактивного опроса:

const inquirer = require('inquirer');

async function main() {
  const answers = await inquirer.prompt([
    {
      type: 'input',
      name: 'username',
      message: 'Как вас зовут?',
      validate: input => input.length > 0 ? true : 'Имя не может быть пустым'
    },
    {
      type: 'list',
      name: 'color',
      message: 'Любимый цвет?',
      choices: ['Красный', 'Зел                    

Рекомендаций