Argumentos de línea de comando

Cada vez que se ejecuta un programa con Node.js, este se encarga de procesar los argumentos y guardarlos en el objeto process.argv. Veamos qué contiene este objeto si se ejecuta la aplicación;

Para ello en nuestra aplicación de greeting editamos el contenido del archivo index.js y añadimos la siguiente línea al final:

console.log(process.argv);

Ejecutamos la aplicación con el siguiente comando:

node index.js

Podemos observar el siguiente resultado en la consola:

[ '/Users/.../.nvm/versions/node/v12.13.1/bin/node',
'/Users/.../02-greeting/index.js' ]

Se ha modificado la ruta de los directorios para omitir información no relevante y reemplazado con tres puntos seguidos (...)

El objeto process.argv es un Array que en cada posición almacena cada argumento, en este caso el primero, es la ubicación del ejecutable de Node.js y, el segundo, es el archivo de entrada de la aplicación. Los argumentos se interpretan ya que van separados por espacios.

Modificar el archivo index.js de la siguiente manera:

const args = process.argv.slice(2);
const [name = "Friend"] = args;
const hour = new Date().getHours();

// Ask for hours range
if (hour >= 6 && hour < 12) {
  console.log(`Good morning ${name}`);
} else if (hour >= 12 && hour < 18) {
  console.log(`Good afternoon ${name}`);
} else if (hour >= 18 && hour < 23) {
  console.log(`Good evening ${name}`);
} else {
  console.log(`Good night ${name}`);
}

A continuación se describen los cambios:

  1. Almacenamos en la variable args una porción del Array de argumentos originalmente de la propiedad argv, ignoramos los dos (2) primeros con el método slice.
  2. Utilizamos Array Destructuring para obtener la primera posición del Array y si esta no existe le asignamos el valor por defecto de "Friend".
  3. Obtenemos la hora local.
  4. Finalmente dependiendo del valor de la hora local se imprime un mensaje saludando con el nombre de la persona que se envio como argumento en la ejecucuión del programa.

Ejecutamos la aplicación con el siguiente comando:

node index.js Gustavo