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