#!/usr/bin/nodejs
console.log (process.argv.length + " parámetros");
process.argv.forEach ((value, index) =>
{console.log ("Parámetro "+index+ " -> " + value)});
if (process.argv.length != 3) {
console.log ("Solo un parámetro pot favor");
return;
}
console.log ("Hola " + process.argv[2]);El código de este ejemplo es específico para NodeJS. Sin embargo, teniendo en cuenta que esta es quizás la forma más habitual de ejecutar código JavaScript en la consola, podemos considerarlo bastante estándar.
El enfoque es el habitual, los parámetros se pasan al programa en una
matriz especial llamada process.argv. A differencia de
otros lenguajes, en JavaScript sobre NodeJS, los dos
primeros parámetros indican el nombre del fichero que se ejecuta. De
hecho, el primero es el nombre del interprete y el segundo el del
fichero JavaScript que estamos ejecutando.
Por esta razón es habitual, descartar los dos primeros parámetros:
var mis_argv = process.argv.slice (2);process.argv es un array, podemos acceder al número de elementos que contiene utilizando la propiedad process.argv.length.
Como en muchos de los lenguajes más modernos, JavaScript no nos permite modificar el nombre del proceso cambiando los valores de
argv. Podemos conseguir esto con la siguiente línea:process.title = “MiNombreNuevo”;
Alternativamente, como en todos los casos, podemos usar
exec -a Nombre node script.jso usar un módulo para llamar nativamente apctlcomo por ejemplonode-setproctitle.
NodeJS nos ofrece multitud de paquetes para procesar los argumentos
que recibimos por la línea de comandos. Existe un módulo que funciona de
forma similar a getopt pero no ha sido actualizado durante
años, así que, por una parte es difícil hacerlo funcionar, y por otra no
tiene mucho sentido usarla, así que vamos a utilizar yargs
que es un módulo más moderno.
Aseguraros de que npm está ya instalado. Luego podéis
usar npm para instalar el módulo.
apt install npm npm install yargs@17
Probando esto en Debian 13 con la versión stable de nodejs que se
incluye es necesario instalar una version vieja (version 17) de
yargs o cambiar el código.
npmo el Gestor de Paquete de Node (Node Package Manager) es una utilidad que nos permite instalar (entre otras cosas) paquetes para Node.js. Utiliza un repositorio en línea donde desarrolladores de todo el mundo publican sus módulos para nodejs.
A modo de ejemplo os mostramos esta solución, pero quizás deberíais probar otras, las cuales, de cualquier forma, funcionan de forma muy parecida.
#!/usr/bin/env node
const yargs = require('yargs/yargs');
const { hideBin } = require('yargs/helpers');
const argv = yargs(hideBin(process.argv))
.usage('Usage: $0 [options]')
.option('i', {
alias: 'input',
type: 'string',
describe: 'Input file name',
default: 'input.txt'
})
.option('o', {
alias: 'output',
type: 'string',
describe: 'Output file name',
default: 'output.txt'
})
.help('h')
.alias('h', 'help')
.parse();
// Show selected filenames
console.log('Input file :', argv.input);
console.log('Output file:', argv.output);Como podéis ver en el código, yargs es capaz de generar
automáticamente el mensaje de ayuda a partir de los distintos campos que
usamos para definir cada opción.
RESUMEN
- Los argumentos son recibidos a través de una matriz especial
process.argv - Los dos primeros argumentos indican el intérprete y el nombre del script JS que se ejecuta.
- NodeJS ofrece varios paquetes para procesar los argumentos de la línea de comandos de forma fácil y sencilla.
■
