Commander.js: Creación de potentes aplicaciones de consola en Node.js
En el mundo del desarrollo web moderno y la automatización, las aplicaciones de consola (CLI) juegan un papel clave. Permiten automatizar tareas rutinarias, gestionar proyectos, desplegar código e interactuar con APIs sin utilizar una interfaz gráfica. Si escribes en JavaScript (Node.js), la mejor opción para crear herramientas CLI elegantes y funcionales es el framework Commander.js.
Commander.js es una biblioteca ligera, pero increíblemente potente, que se encarga de toda la rutina de análisis de argumentos de línea de comandos, generación de ayuda y manejo de errores. Con ella, puedes convertir un script simple en una aplicación de consola profesional con soporte para subcomandos, opciones y validación automática. En este artículo, analizaremos en detalle cómo usar Commander.js en el sitio educativo pythonlib.ru para crear tus propias utilidades CLI.
Instalación y uso básico
Antes de comenzar, asegúrate de tener Node.js instalado (versión 12 o superior). La instalación de Commander.js se realiza a través de npm:
npm install commanderDespués de la instalación, crea un archivo cli.js y conecta la biblioteca. Veamos un ejemplo muy simple: una aplicación que muestra "Hello, World!" y recibe el nombre del usuario.
#!/usr/bin/env nodeconst { Command } = require('commander');const program = new Command();
program .name('greet') .description('Muestra un saludo') .version('1.0.0');
program .command('hello') .description('Saluda al usuario') .argument('<name>', 'Nombre del usuario') .action((name) => { console.log(`¡Hola, ${name}! Bienvenido a Commander.js.`); });
program.parse(process.argv);Ahora ejecuta el script:
node cli.js hello JuanVerás: ¡Hola, Juan! Bienvenido a Commander.js.
Funcionalidades principales de Commander.js
Commander.js proporciona un rico conjunto de funciones para crear aplicaciones CLI profesionales. Veámoslas en detalle.
1. Comandos y subcomandos
Puedes crear una cantidad ilimitada de comandos (por ejemplo, init, build, deploy) y anidarlos unos dentro de otros. Esto es especialmente útil para herramientas complejas, como gestores de paquetes o empaquetadores de proyectos.
program .command('init') .description('Inicializa un nuevo proyecto') .option('-t, --template <type>', 'Plantilla del proyecto (basic, advanced)') .action((options) => { console.log(`Creando proyecto con la plantilla: ${options.template || 'basic'}`); });2. Opciones (flags)
Las opciones permiten al usuario pasar parámetros adicionales. Commander.js soporta flags cortos (-v) y largos (--verbose), así como valores obligatorios y opcionales.
program .option('-d, --debug', 'Activar modo de depuración') .option('-p, --port <number>', 'Puerto del servidor', '3000') // valor por defecto .parse(process.argv);
if (program.opts().debug) { console.log('Depuración activada');}3. Argumentos de comandos
Los argumentos son parámetros posicionales que el usuario pasa después del comando. Pueden ser obligatorios (<name>) u opcionales ([name]).
program .command('copy <source> [destination]') .description('Copia un archivo de source a destination') .action((source, destination) => { console.log(`Copiando de ${source} a ${destination || 'la carpeta actual'}`); });4. Ayuda automática y versionado
Commander.js genera automáticamente la ayuda al usar el flag --help o