CLI фреймворки для TypeScript: полный обзор и примеры использования

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

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

Начать курс

CLI фреймворки для TypeScript: создаём мощные консольные приложения

Современная разработка на TypeScript немыслима без создания инструментов командной строки (CLI). Будь то сборщик проектов, генератор кода или утилита для автоматизации — каждый разработчик хотя бы раз задумывался о написании собственной консольной программы. В этой статье мы подробно разберём лучшие CLI фреймворки для TypeScript, их особенности и приведём практические примеры кода.

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

Написание CLI «с нуля» — это не только обработка аргументов командной строки, но и управление подкомандами, валидация ввода, цветной вывод, интерактивные подсказки. Фреймворк берёт на себя рутину, позволяя сосредоточиться на бизнес-логике. TypeScript добавляет строгую типизацию, что особенно ценно при разработке сложных консольных приложений.

Топ-4 CLI фреймворка для TypeScript

1. Commander.js

Самый популярный фреймворк (более 30 млн загрузок в неделю). Идеален для создания сложных многоуровневых CLI с подкомандами, опциями и автоматической генерацией справки.

Установка:

npm install commander

Пример базового приложения:

import { Command } from 'commander';

const program = new Command();

program
  .name('greet')
  .description('CLI для приветствия')
  .version('1.0.0');

program
  .command('hello')
  .argument('<name>', 'имя пользователя')
  .option('-l, --lang <lang>', 'язык приветствия', 'ru')
  .action((name, options) => {
    const greetings: Record<string, string> = {
      ru: 'Привет',
      en: 'Hello',
      de: 'Hallo'
    };
    const greeting = greetings[options.lang] || greetings.ru;
    console.log(`${greeting}, ${name}!`);
  });

program.parse();

Запуск:

npx ts-node index.ts hello Иван --lang en
# Вывод: Hello, Иван!

2. Inquirer.js

Библиотека для создания интерактивных подсказок в терминале. Позволяет задавать вопросы, выбирать варианты, вводить пароли и многое другое. Отлично комбинируется с Commander.

Установка:

npm install inquirer @types/inquirer

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

import inquirer from 'inquirer';

interface Answers {
  name: string;
  role: string;
  experience: number;
}

async function main() {
  const answers: Answers = await inquirer.prompt([
    {
      type: 'input',
      name: 'name',
      message: 'Как вас зовут?',
      validate: (input: string) => input.length > 0 || 'Имя не может быть пустым'
    },
    {
      type: 'list',
      name: 'role',
      message: 'Ваша роль?',
      choices: ['Frontend', 'Backend', 'Fullstack', 'DevOps']
    },
    {
      type: 'number',
      name: 'experience',
      message: 'Лет опыта?',
      default: 1
    }
  ]);

  console.log(`\n✅ ${answers.name}, вы ${answers.role} с опытом ${answers.experience} лет.`);
}

main();

3. Clack

Современный фреймворк от создателей Astro. Отличается минималистичным API, красивыми анимациями и поддержкой TypeScript «из коробки». Идеален для быстрого прототипирования.

Установка:

npm install @clack/prompts

Пример с выбором цвета:

import * as clack from '@clack/prompts';

async function main() {
  clack.intro('Выбор цвета');

  const color = await clack.select({
    message: 'Выберите любимый цвет:',
    options: [
      { value: 'red', label: 'Красный' },
      { value: 'green', label: 'Зелёный' },
      { value: 'blue', label: 'Синий' }
    ]
  });

  clack.note(`Вы выбрали: ${color}`);
  clack.outro('Спасибо за выбор!');
}

main();

4. Yargs

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

Установка:

npm install yargs

Пример с валидацией:

import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';

interface Arguments {
  name: string;
  age                    

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