Kodokon kodokon.com

Scripts de línea de comandos: argumentos, entorno y códigos de salida

Escribes scripts que reciben argumentos con process.argv, leen variables de entorno y devuelven un código de salida.

8 min · 3 preguntas

Abrir esta lección en Kodokon

Ya usas programas de línea de comandos: node, npm, git, etc. Cada uno acepta argumentos, las palabras que se escriben después de su nombre y que cambian su comportamiento. Escribamos el nuestro. Node expone el objeto global process, que describe el programa que se está ejecutando - ya te lo encontraste con process.version. Su propiedad process.argv es un array que contiene: en el índice 0, la ruta a Node; en el índice 1, la ruta a tu script; y a partir del índice 2, los argumentos que el usuario escribe realmente.

JAVASCRIPT
console.log(process.argv);

const args = process.argv.slice(2);
console.log("Your arguments:", args);
Guarda este código en args.js y luego ejecuta node args.js apple pear: slice(2) aísla los argumentos útiles.

Una segunda fuente de información: las variables de entorno. Son pares nombre/valor que el sistema proporciona al programa en el momento de arrancar. Se usan para la configuración: una clave de API secreta, el modo de depuración, la dirección de una base de datos, etc. Las lees en el objeto process.env. Una variable ausente es undefined: prevé siempre un valor por defecto, por ejemplo con el operador ??.

JAVASCRIPT
const level = process.env.LOG_LEVEL ?? "info";

console.log("Log level:", level);
Guarda este código en config.js: sin ninguna variable definida, el nivel es info.
BASH
LOG_LEVEL=debug node config.js
En macOS y Linux, defines una variable justo antes del comando: el script imprime entonces debug.

Cuando un programa termina, devuelve un código de salida al sistema: un número que resume cómo fueron las cosas. Convención universal: 0 significa "éxito", cualquier otro valor señala un error - esto es lo que otras herramientas y scripts comprueban para saber si todo funcionó. process.exit(1) detiene de inmediato el script con el código 1. Usa también console.error para los mensajes de error: escribe en la salida de error (stderr), un canal separado de la salida normal. Juntémoslo todo en un script completo.

JAVASCRIPT
const name = process.argv[2];

if (!name) {
  console.error("Usage: node greet.js <name>");
  process.exit(1);
}

console.log(`Hello, ${name}!`);
Sin argumento, greet.js explica su uso y sale con el código 1; con un nombre, saluda y termina con el código 0.

Prueba de conocimientos

Comprueba que has retenido los puntos clave de esta lección.

  1. En process.argv, ¿dónde está el primer argumento escrito por el usuario?
    • En el índice 0
    • En el índice 2
    • En el índice 1
    • Siempre en el último índice
  2. ¿Qué código de salida señala que un programa terminó con éxito?
    • 0
    • 1
    • 200
  3. ¿Cómo se lee la variable de entorno API_KEY en un script de Node?
    • process.argv.API_KEY
    • env.get("API_KEY")
    • process.env.API_KEY