Frameworks CLI para TypeScript: criando aplicações de console poderosas
O desenvolvimento moderno com TypeScript é impensável sem a criação de ferramentas de linha de comando (CLI). Seja um construtor de projetos, um gerador de código ou um utilitário de automação — todo desenvolvedor já pensou pelo menos uma vez em escrever seu próprio programa de console. Neste artigo, analisaremos detalhadamente os melhores frameworks CLI para TypeScript, suas características e forneceremos exemplos práticos de código.
Para que serve um framework CLI?
Escrever uma CLI "do zero" não é apenas processar argumentos de linha de comando, mas também gerenciar subcomandos, validar entrada, saída colorida e dicas interativas. O framework assume o trabalho rotineiro, permitindo que você se concentre na lógica de negócios. O TypeScript adiciona tipagem estrita, o que é especialmente valioso no desenvolvimento de aplicações de console complexas.
Top 4 frameworks CLI para TypeScript
1. Commander.js
O framework mais popular (mais de 30 milhões de downloads por semana). Ideal para criar CLIs complexas de vários níveis com subcomandos, opções e geração automática de ajuda.
Instalação:
npm install commanderExemplo de aplicação básica:
import { Command } from 'commander';
const program = new Command();
program .name('greet') .description('CLI para saudação') .version('1.0.0');
program .command('hello') .argument('<name>', 'nome do usuário') .option('-l, --lang <lang>', 'idioma da saudação', 'pt') .action((name, options) => { const greetings: Record<string, string> = { pt: 'Olá', en: 'Hello', de: 'Hallo' }; const greeting = greetings[options.lang] || greetings.pt; console.log(`${greeting}, ${name}!`); });
program.parse();Execução:
npx ts-node index.ts hello João --lang en# Saída: Hello, João!2. Inquirer.js
Biblioteca para criar prompts interativos no terminal. Permite fazer perguntas, selecionar opções, inserir senhas e muito mais. Combina perfeitamente com o Commander.
Instalação:
npm install inquirer @types/inquirerExemplo de enquete interativa:
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: 'Qual é o seu nome?', validate: (input: string) => input.length > 0 || 'O nome não pode estar vazio' }, { type: 'list', name: 'role', message: 'Qual é a sua função?', choices: ['Frontend', 'Backend', 'Fullstack', 'DevOps'] }, { type: 'number', name: 'experience', message: 'Anos de experiência?', default: 1 } ]);
console.log(`✅ ${answers.name}, você é ${answers.role} com ${answers.experience} anos de experiência.`);}
main();3. Clack
Framework moderno dos criadores do Astro. Destaca-se pela API minimalista, animações bonitas e suporte nativo a TypeScript. Ideal para prototipagem rápida.
Instalação:
npm install @clack/promptsExemplo com seleção de cor:
import * as clack from '@clack/prompts';
async function main() { clack.intro('Seleção de cor');
const color = await clack.select({ message: 'Escolha sua cor favorita:', options: [ { value: 'red', label: 'Vermelho' }, { value: 'green', label: 'Verde' }, { value: 'blue', label: 'Azul' } ] });
clack.note(`Você escolheu: ${color}`); clack.outro('Obrigado pela escolha!');}
main();4. Yargs
Poderoso parser de argumentos
Também na biblioteca
Filas de Tarefas para C++: Implementação e Uso
migrate para Go: guia completo com exemplos práticos
Envio de SMS em Java: visão geral de bibliotecas e ferramentas de API
Symfony/Security PHP: guia completo com exemplos práticos