Frameworks CLI para TypeScript: creando potentes aplicaciones de consola
El desarrollo moderno con TypeScript es impensable sin la creación de herramientas de línea de comandos (CLI). Ya sea un empaquetador de proyectos, un generador de código o una utilidad de automatización, todo desarrollador ha considerado al menos una vez escribir su propio programa de consola. En este artículo, analizaremos en detalle los mejores frameworks CLI para TypeScript, sus características y proporcionaremos ejemplos prácticos de código.
¿Por qué necesitas un framework CLI?
Escribir una CLI «desde cero» no solo implica procesar argumentos de línea de comandos, sino también gestionar subcomandos, validar entradas, generar salida con colores y mostrar indicaciones interactivas. El framework se encarga de las tareas rutinarias, permitiéndote concentrarte en la lógica de negocio. TypeScript añade tipado estricto, lo que es especialmente valioso al desarrollar aplicaciones de consola complejas.
Top 4 frameworks CLI para TypeScript
1. Commander.js
El framework más popular (más de 30 millones de descargas por semana). Es ideal para crear CLI complejas de múltiples niveles con subcomandos, opciones y generación automática de ayuda.
Instalación:
npm install commanderEjemplo de aplicación básica:
import { Command } from 'commander';
const program = new Command();
program .name('greet') .description('CLI para saludos') .version('1.0.0');
program .command('hello') .argument('<name>', 'nombre del usuario') .option('-l, --lang <lang>', 'idioma del saludo', '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();Ejecución:
npx ts-node index.ts hello Iván --lang en# Salida: Hello, Iván!2. Inquirer.js
Biblioteca para crear indicaciones interactivas en la terminal. Permite hacer preguntas, seleccionar opciones, ingresar contraseñas y mucho más. Se combina excelentemente con Commander.
Instalación:
npm install inquirer @types/inquirerEjemplo de encuesta interactiva:
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: '¿Cómo te llamas?', validate: (input: string) => input.length > 0 || 'El nombre no puede estar vacío' }, { type: 'list', name: 'role', message: '¿Cuál es tu rol?', choices: ['Frontend', 'Backend', 'Fullstack', 'DevOps'] }, { type: 'number', name: 'experience', message: '¿Años de experiencia?', default: 1 } ]);
console.log(`✅ ${answers.name}, eres ${answers.role} con ${answers.experience} años de experiencia.`);}
main();3. Clack
Framework moderno de los creadores de Astro. Se distingue por su API minimalista, hermosas animaciones y soporte nativo para TypeScript. Ideal para prototipado rápido.
Instalación:
npm install @clack/promptsEjemplo con selección de color:
import * as clack from '@clack/prompts';
async function main() { clack.intro('Selección de color');
const color = await clack.select({ message: 'Elige tu color favorito:', options: [ { value: 'red', label: 'Rojo' }, { value: 'green', label: 'Verde' }, { value: 'blue', label: 'Azul' } ] });
clack.note(`Has seleccionado: ${color}`); clack.outro('¡Gracias por tu elección!');}
main();4. Yargs
Potente analizador de argumentos
También en la biblioteca
league/csv para PHP: guía completa con ejemplos
Trabajo con imágenes en Go (Golang): image, draw, imaging, resize
Migraciones de bases de datos en Node.js: Resumen de herramientas y ejemplos
ORM para Kotlin: Exposed vs Ktor vs Ktorm — comparación y ejemplos
Envío de Email en Java: bibliotecas JavaMail y Simple Java Mail