Creación de herramientas CLI en Node.js: revisión de los frameworks Commander, Yargs e Inquirer

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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

Recommendations