Frameworks CLI para TypeScript: creación de potentes aplicaciones de consola
El desarrollo moderno con TypeScript es impensable sin herramientas de línea de comandos (CLI). Ya sea para compilar un proyecto, generar código o automatizar tareas, una interfaz CLI de calidad aumenta la productividad del desarrollador. En este artículo, revisaremos los mejores frameworks para crear CLI en TypeScript, sus características y proporcionaremos ejemplos prácticos.
¿Por qué necesitas un framework CLI?
Crear una CLI desde cero es una tarea laboriosa. Los frameworks proporcionan soluciones listas para:
- Analizar argumentos de línea de comandos
- Crear jerarquías de comandos (subcomandos)
- Generar automáticamente ayuda (
--help) - Manejar errores y validar entrada
- Sugerencias interactivas (autocompletado)
- Salida a color y barras de progreso
Principales frameworks CLI para TypeScript
1. Commander.js
El framework más popular para CLI en Node.js. Se destaca por su simplicidad y flexibilidad. Es ideal para proyectos de cualquier tamaño.
import { Command } from 'commander';
const program = new Command();
program .name('my-cli') .description('Ejemplo de aplicación CLI') .version('1.0.0');
program .command('greet') .argument('<name>', 'Nombre del usuario') .option('-l, --language <lang>', 'Idioma del saludo', 'ru') .action((name, options) => { const greetings: Record<string, string> = { ru: `¡Hola, ${name}!`, en: `Hello, ${name}!`, es: `¡Hola, ${name}!`, }; console.log(greetings[options.language] || greetings['ru']); });
program.parse(process.argv);Ventajas de Commander:
- API intuitiva
- Soporte para TypeScript desde el primer momento
- Fácil integración con otras bibliotecas
- Gran comunidad y documentación
2. Ink (React para CLI)
Un framework único que permite construir interfaces CLI utilizando componentes de React. Ideal para aplicaciones interactivas con una interfaz de usuario enriquecida.
import React, { useState } from 'react';import { render, Text, Box, useInput } from 'ink';
const Counter = () => { const [count, setCount] = useState(0);
useInput((input) => { if (input === 'q') process.exit(0); if (input === '+') setCount(c => c + 1); if (input === '-') setCount(c => c - 1); });
return ( <Box flexDirection="column" alignItems="center"> <Text color="green" bold>Contador: {count}</Text> <Text dimColor>Presiona + o - para cambiar, q para salir</Text> </Box> );};
render(<Counter />);Ventajas de Ink:
- Enfoque basado en componentes (familiar para desarrolladores de React)
- Actualización automática de la interfaz
- Soporte para animaciones y barras de progreso
- Personalización flexible de la salida
3. Oclif (Heroku CLI Engine)
Framework de los creadores de Heroku CLI. Ofrece un potente generador de proyectos y soporte integrado para plugins. Ideal para soluciones empresariales.
import { Command, Flags } from '@oclif/core';
export class Greet extends Command { static description = 'Saludo al usuario';
static flags = { name: Flags.string({ char: 'n', description: 'Nombre', required: true }), uppercase: Flags.boolean({ char: 'u', description: 'Mayúsculas' }), };
async run(): Promise<void> { const { flags } = await this.parse(Greet); let message = `¡Hola, ${flags.name}!`; if (flags.uppercase) message = message.toUpperCase(); this.log(message); }}Ventajas de Oclif:
- Generación automática de CLI (mediante
npx oclif generate) - Sistema de pruebas integrado
- Soporte para hooks y plugins
También en la biblioteca
Awaitility en Java: guía completa con ejemplos prácticos
Planificador de tareas PHP: guía completa sobre tareas cron y Task Scheduler
ent para Go: guía completa con ejemplos prácticos
Cliente HTTP para JavaScript (Node.js): mejores bibliotecas