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

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

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

Начать курс

Commander.js: Создание мощных консольных приложений на Node.js

В мире современной веб-разработки и автоматизации консольные приложения (CLI) играют ключевую роль. Они позволяют автоматизировать рутинные задачи, управлять проектами, развертывать код и взаимодействовать с API без использования графического интерфейса. Если вы пишете на JavaScript (Node.js), то лучшим выбором для создания элегантных и функциональных CLI-инструментов является фреймворк Commander.js.

Commander.js — это легковесная, но невероятно мощная библиотека, которая берет на себя всю рутину парсинга аргументов командной строки, генерации справки и обработки ошибок. С её помощью вы можете превратить простой скрипт в профессиональное консольное приложение с поддержкой подкоманд, опций и автоматической валидации. В этой статье мы подробно разберем, как использовать Commander.js на образовательном сайте pythonlib.ru для создания собственных CLI-утилит.

Установка и базовое использование

Перед началом работы убедитесь, что у вас установлен Node.js (версия 12 и выше). Установка Commander.js осуществляется через npm:

npm install commander

После установки создайте файл cli.js и подключите библиотеку. Рассмотрим простейший пример — приложение, которое выводит "Hello, World!" и принимает имя пользователя.

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

program
  .name('greet')
  .description('Выводит приветствие')
  .version('1.0.0');

program
  .command('hello')
  .description('Приветствует пользователя')
  .argument('<name>', 'Имя пользователя')
  .action((name) => {
    console.log(`Привет, ${name}! Добро пожаловать в Commander.js.`);
  });

program.parse(process.argv);

Теперь запустите скрипт:

node cli.js hello Иван

Вы увидите: Привет, Иван! Добро пожаловать в Commander.js.

Основные возможности Commander.js

Commander.js предоставляет богатый набор функций для создания профессиональных CLI-приложений. Рассмотрим их подробнее.

1. Команды и подкоманды

Вы можете создавать неограниченное количество команд (например, init, build, deploy) и вкладывать их друг в друга. Это особенно полезно для сложных инструментов, таких как менеджеры пакетов или сборщики проектов.

program
  .command('init')
  .description('Инициализирует новый проект')
  .option('-t, --template <type>', 'Шаблон проекта (basic, advanced)')
  .action((options) => {
    console.log(`Создание проекта с шаблоном: ${options.template || 'basic'}`);
  });

2. Опции (флаги)

Опции позволяют пользователю передавать дополнительные параметры. Commander.js поддерживает короткие (-v) и длинные (--verbose) флаги, а также обязательные и необязательные значения.

program
  .option('-d, --debug', 'Включить режим отладки')
  .option('-p, --port <number>', 'Порт сервера', '3000') // значение по умолчанию
  .parse(process.argv);

if (program.opts().debug) {
  console.log('Отладка включена');
}

3. Аргументы команд

Аргументы — это позиционные параметры, которые пользователь передаёт после команды. Они могут быть обязательными (<name>) или опциональными ([name]).

program
  .command('copy <source> [destination]')
  .description('Копирует файл из source в destination')
  .action((source, destination) => {
    console.log(`Копирование из ${source} в ${destination || 'текущую папку'}`);
  });

4. Автоматическая справка и версионирование

Commander.js автоматически генерирует справку при использовании флага --help или -h. Метод .version() добавляет поддержку --version.

// Встроенная справка
program
  .command('deploy')
  .option('--env <name>', 'Окружение (staging/production)')
  .addHelpText('after', 'Пример: myapp deploy --env production')
  .action(() => {});

5. Хуки и события

Для более тонкой настройки вы можете использовать хуки жизненного цикла (например, preAction и postAction), а также подписываться на события ввода.


                
    
    

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