Framework CLI para JavaScript (Node.js): creando potentes aplicaciones de consola
El desarrollo de utilidades de consola (CLI) es una de las tareas clave en el ecosistema de Node.js. Ya sea automatización de compilación, gestión de paquetes, generación de código o scripts simples para DevOps — no se puede prescindir de un framework CLI de calidad. En este artículo analizaremos las tres herramientas más populares: Commander, Yargs e Inquirer. Aprenderás cómo funcionan, cuáles son sus puntos fuertes y verás ejemplos de código.
¿Para qué sirve un framework CLI?
Se puede escribir un programa de consola simple sin framework — basta con procesar process.argv. Pero cuando el proyecto crece, aparecen subcomandos, banderas, indicaciones interactivas — el análisis manual de argumentos se vuelve un infierno. Los frameworks se encargan de:
- analizar argumentos y opciones;
- generar ayuda (
--help); - validar datos de entrada;
- soportar subcomandos (como en
git); - diálogos interactivos con el usuario.
Commander — clásico y estándar
Commander es el framework CLI más popular para Node.js. Lo utilizan gigantes como Vue CLI, NestJS y muchos otros. Sus principales características: API intuitiva, generación automática de ayuda, soporte para argumentos variados.
Ejemplo de una aplicación simple:
#!/usr/bin/env nodeconst { Command } = require('commander');const program = new Command();
program .name('greet') .description('Saludo al usuario') .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 === 'es') { console.log(`¡Hola, ${name}!`); } else { console.log(`Hello, ${name}!`); } });
program.parse();Ejecución: node app.js hello Juan --lang es → ¡Hola, Juan!
Commander genera automáticamente la ayuda con --help y soporta encadenamiento de llamadas. Es la elección ideal para la mayoría de las utilidades CLI.
Yargs — flexibilidad y comodidad
Yargs es otro framework potente, especialmente fuerte en el análisis de opciones complejas y la detección automática de tipos. Es popular entre desarrolladores que necesitan un control preciso sobre los argumentos.
Ejemplo con Yargs:
#!/usr/bin/env nodeconst yargs = require('yargs/yargs');const { hideBin } = require('yargs/helpers');
const argv = yargs(hideBin(process.argv)) .command('calc', 'Calculadora', (yargs) => { return yargs .option('a', { describe: 'Primer número', type: 'number', demandOption: true }) .option('b', { describe: 'Segundo número', type: 'number', demandOption: true }) .option('op', { describe: 'Operación (sum, sub)', type: 'string', default: 'sum' }); }, (argv) => { const { a, b, op } = argv; if (op === 'sum') console.log(`Suma: ${a + b}`); else if (op === 'sub') console.log(`Resta: ${a - b}`); else console.log('Operación desconocida'); }) .demandCommand(1, 'Especifique un comando') .help() .argv;Yargs puede convertir automáticamente cadenas en números, valores booleanos e incluso arrays. Su potente sistema de middleware permite agregar validaciones comunes para todos los comandos.
Inquirer — interactividad en la terminal
Inquirer no es exactamente un framework CLI, sino más bien una biblioteca para crear interfaces de consola interactivas. Complementa perfectamente a Commander o Yargs cuando se necesitan preguntas con opciones, entrada de texto, casillas de verificación.
Ejemplo de encuesta interactiva:
const inquirer = require('inquirer');
async function main() { const answers = await inquirer.prompt([ { type: 'inp También en la biblioteca
Serialización de objetos en Java: guía completa para principiantes
Trabajo con archivos ZIP en C# (.NET): guía completa
Trabajo con Markdown en Java: bibliotecas, análisis y conversión
Generación de Swagger/OpenAPI para JavaScript (Node.js) — herramientas y bibliotecas
Rector para PHP: guía completa con ejemplos prácticos