Frameworks CLI para TypeScript: creando potentes aplicaciones de consola
Desarrollar interfaces de línea de comandos (CLI) en TypeScript no es solo escribir un analizador de argumentos. Las aplicaciones CLI modernas pueden ser interactivas, coloridas, soportar autocompletado e incluso mostrar gráficos animados. Para ello, existen frameworks y bibliotecas especializados. En este artículo, analizaremos cuatro herramientas clave para crear CLI en TypeScript: Commander.js, Ink, Oclif y Yargs. Conocerás sus puntos fuertes, obtendrás ejemplos de código listos para usar y entenderás qué herramienta se adapta mejor a tu tarea.
1. Commander.js — clásico y sencillez
Commander.js es el framework más popular para crear CLI en Node.js y TypeScript. Ofrece una API declarativa para describir comandos, argumentos y opciones. Gracias al soporte integrado de TypeScript, obtienes autocompletado y verificación de tipos.
Características principales:
- Generación automática de ayuda (
--help). - Soporte para comandos anidados (subcomandos).
- Validación de argumentos obligatorios.
- Sistema flexible de opciones: booleanas, de cadena, con valores predeterminados.
Ejemplo de una CLI simple con Commander.js + TypeScript:
import { Command } from 'commander';
const program = new Command();
program .name('greet') .description('CLI para saludar') .version('1.0.0');
program .command('hello') .argument('<name>', 'Nombre del usuario') .option('-l, --lang <language>', 'Idioma del saludo', 'es') .action((name, options) => { if (options.lang === 'en') { console.log(`Hello, ${name}!`); } else { console.log(`¡Hola, ${name}!`); } });
program.parse(process.argv);Commander.js es ideal para utilidades simples y scripts de automatización. No está sobrecargado con dependencias innecesarias y está bien documentado.
2. Ink — CLI reactivo con componentes
Ink es un framework único que permite construir interfaces CLI utilizando componentes similares a React. Escribes en JSX e Ink lo renderiza en la terminal. Combinado con TypeScript, obtienes una tipificación estricta de los componentes.
Características clave:
- Enfoque basado en componentes:
<Text>,<Box>,<Spacer>. - Actualización automática al cambiar el estado (reactividad).
- Soporte para animaciones, indicadores de carga, barras de progreso.
- Integración profunda con hooks de React (
useInput,useApp).
Ejemplo de una CLI interactiva con 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}. Presiona '+' o '-'</Text> </Box> );};
render(<Counter />);Ink es adecuado para utilidades interactivas complejas, asistentes de instalación, paneles en la terminal. Es la mejor opción si necesitas una interfaz atractiva y receptiva.
3. Oclif — framework para CLI escalables
Oclif (Open CLI Framework) de Heroku es un framework completo para crear aplicaciones CLI de cualquier complejidad. Soporta plugins, actualización automática, hooks y generación de proyectos.
Puntos fuertes:
- Generador de código integrado (
oclif generate). - Soporte para TypeScript listo para usar.
- Sistema de plugins para ampliar la funcionalidad.
- Actualización automática de la CLI a través de npm.
Ej
También en la biblioteca
Juniper: Una elegante biblioteca GraphQL en Rust para aplicaciones web modernas
Colas de tareas en C# (.NET): System.Threading.Channels y TPL Dataflow