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 commanderEjemplo 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 yargsEjemplo 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
También en la biblioteca
Monitoreo de aplicaciones Java: biblioteca Micrometer e integración con Prometheus
Validación de datos en C++: bibliotecas y métodos (libvalidate, nlohmann/json, Boost)
Cliente Redis para PHP: Predis y PhpRedis – conexión y ejemplos
Cliente HTTP para Swift (iOS/macOS): mejores bibliotecas 2024