Frameworks CLI para TypeScript: criando aplicações de console poderosas
Desenvolver interfaces de linha de comando (CLI) em TypeScript não é apenas escrever um analisador de argumentos. As aplicações CLI modernas podem ser interativas, coloridas, suportar autocompletar e até exibir gráficos animados. Para isso, existem frameworks e bibliotecas especializadas. Neste artigo, vamos analisar quatro ferramentas-chave para criar CLI em TypeScript: Commander.js, Ink, Oclif e Yargs. Você conhecerá seus pontos fortes, obterá exemplos de código prontos e entenderá qual ferramenta é adequada para sua tarefa.
1. Commander.js — clássico e simplicidade
Commander.js é o framework mais popular para criar CLI em Node.js e TypeScript. Ele oferece uma API declarativa para descrever comandos, argumentos e opções. Graças ao suporte nativo a TypeScript, você obtém autocompletar e verificação de tipos.
Principais recursos:
- Geração automática de ajuda (
--help). - Suporte a comandos aninhados (subcomandos).
- Validação de argumentos obrigatórios.
- Sistema flexível de opções: booleanas, strings, com valores padrão.
Exemplo de CLI simples com Commander.js + TypeScript:
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 <language>', 'Idioma da saudação', 'pt') .action((name, options) => { if (options.lang === 'en') { console.log(`Hello, ${name}!`); } else { console.log(`Olá, ${name}!`); } });
program.parse(process.argv);Commander.js é ideal para utilitários simples e scripts de automação. Ele não é sobrecarregado com dependências desnecessárias e é bem documentado.
2. Ink — CLI reativo com componentes
Ink é um framework único que permite construir interfaces CLI usando componentes semelhantes ao React. Você escreve em JSX, e o Ink renderiza isso no terminal. Combinado com TypeScript, você obtém tipagem estrita dos componentes.
Características principais:
- Abordagem de componentes:
<Text>,<Box>,<Spacer>. - Atualização automática ao alterar o estado (reatividade).
- Suporte a animação, indicadores de carregamento, barras de progresso.
- Integração profunda com hooks do React (
useInput,useApp).
Exemplo de CLI interativa com Ink:
import React, { useState } from 'react';import { render, Text, Box, useInput } from 'ink';
const Counter = () => { const [count, setCount] = useState(0);
useInput((input) => { if (input === '+') setCount(prev => prev + 1); if (input === '-') setCount(prev => prev - 1); });
return ( <Box> <Text>Contador: {count}. Pressione '+' ou '-'</Text> </Box> );};
render(<Counter />);Ink é adequado para utilitários interativos complexos, assistentes de instalação, painéis no terminal. É a melhor escolha se você precisa de uma interface bonita e responsiva.
3. Oclif — framework para CLI escaláveis
Oclif (Open CLI Framework) da Heroku é um framework completo para criar aplicações CLI de qualquer complexidade. Ele suporta plugins, atualização automática, hooks e geração de projetos.
Pontos fortes:
- Gerador de código integrado (
oclif generate). - Suporte a TypeScript nativo.
- Sistema de plugins para estender a funcionalidade.
- Atualização automática da CLI via npm.
Exe
Também na biblioteca
Aprendizado de Máquina em Rust: visão geral das bibliotecas para ML e Data Science
Sinon para JavaScript (Node.js): guia completo com exemplos práticos
Biblioteca GraphQL JavaScript (Node.js): Guia Completo sobre Apollo Server e Ferramentas
gRPC para Go (Golang): bibliotecas, exemplos e guia prático