Creación de aplicaciones CLI en Node.js: frameworks Commander y Yargs

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

Frameworks CLI para JavaScript (Node.js): Creación de potentes aplicaciones de consola



El desarrollo de interfaces de línea de comandos (CLI) es una de las tareas clave en el ecosistema Node.js. Desde scripts simples hasta herramientas complejas para DevOps, las aplicaciones CLI nos rodean por todas partes. Sin embargo, escribir un analizador de argumentos, manejar subcomandos y generar ayuda manualmente es un trabajo tedioso y propenso a errores. Aquí es donde los frameworks CLI para JavaScript (Node.js) vienen al rescate, asumiendo todo el trabajo rutinario.



En este artículo, analizaremos en detalle los dos frameworks más populares: Commander.js y Yargs. Aprenderá cómo crear rápidamente aplicaciones CLI profesionales con soporte para argumentos, opciones, salida a color y generación automática de ayuda.



Commander.js — clásico y simplicidad



Commander.js es el framework más conocido y ampliamente utilizado para crear CLI en Node.js. Se utiliza en proyectos como Vue CLI, Angular CLI y muchos otros. Su principal ventaja es una API intuitiva basada en encadenamiento de llamadas.



Instalación

npm install commander


Ejemplo básico

const { Command } = require('commander');const program = new Command();

program .name('greet') .description('CLI para saludar') .version('1.0.0');

program .command('hello') .description('Saludar al usuario') .argument('<name>', 'Nombre del usuario') .option('-l, --language <lang>', 'Idioma del saludo', 'ruso') .action((name, options) => { if (options.language === 'inglés') { console.log(`Hello, ${name}!`); } else { console.log(`¡Hola, ${name}!`); } });

program.parse(process.argv);


En este ejemplo, creamos el comando greet hello, que acepta un argumento obligatorio name y una opción opcional --language. Commander generará automáticamente la ayuda con el comando --help.



Soporte para subcomandos

Commander maneja muy bien la jerarquía de comandos. Puede crear comandos anidados, lo cual es especialmente útil para herramientas complejas:

const project = program.command('project');

project .command('init') .description('Inicializar proyecto') .action(() => { console.log('Proyecto inicializado'); });

project .command('build') .description('Compilar proyecto') .option('-p, --production', 'Compilación de producción') .action((options) => { console.log(options.production ? 'Compilación de producción' : 'Compilación normal'); });


Yargs — flexibilidad y potencia



Yargs es otro potente framework que se centra en el análisis de argumentos y ofrece capacidades muy flexibles. Es especialmente bueno cuando necesita un control preciso sobre el comportamiento del analizador, o cuando construye interfaces complejas de varios niveles.



Instalación

npm install yargs


Ejemplo con Yargs

const yargs = require('yargs/yargs');const { hideBin } = require('yargs/helpers');

const argv = yargs(hideBin(process.argv)) .command('serve [port]', 'Iniciar el servidor', (yargs) => { yargs .positional('port', { describe: 'Puerto para el servidor', default: 3000 }); }, (argv) => { console.log(`Servidor iniciado en el puerto ${argv.port}`); }) .option('verbose', { alias: 'v', type: 'boolean', description: 'Salida detallada' }) .example('$0 serve 8080', 'Iniciar el servidor en el puerto 8080') .demandCommand(1, 'Debe especificar un comando') .help() .argv;


Yargs ofrece un enfoque más determinista para definir comandos. Puede especificar exactamente qué argumentos son posicionales, establecer valores predeterminados para ellos, verificar tipos y mucho más.



Validación y tipos

Una de las fortalezas

Recommendations