Hoy · Hoja de ruta
- 1. Aprende: Cómo se diseña un programa de terminal que otra persona pueda usar.
- 2. Haz: Termina tu CLI del catálogo con sus comandos y su ayuda.
- 3. Comprueba: Un compañero lo usa sin que le expliques nada.
Antes de empezar · 5 minutos, sin apuntes
- ¿Qué hace un buen programa de terminal cuando lo llamas mal?
- ¿Cómo sabes qué comandos acepta un programa que no conoces?
- ¿Qué debería imprimir: todo, o lo justo?
El despachador
const comandos = {
listar: listarProductos,
buscar: buscarProductos,
añadir: añadirProducto,
borrar: borrarProducto,
ayuda: mostrarAyuda
};
const [, , nombre, ...argumentos] = process.argv;
const comando = comandos[nombre];
if (!comando) {
console.error(`Comando desconocido: ${nombre ?? "(ninguno)"}`);
mostrarAyuda();
process.exit(1);
}
try {
await comando(argumentos);
} catch (error) {
console.error(`Error: ${error.message}`);
process.exit(1);
}
Es el objeto de funciones de la sesión 8 de la UD3, ahora con un cometido real. Añadir un comando es añadir una línea.
Lo que hace usable una herramienta
| Regla | Por qué |
|---|---|
| Ayuda con ejemplos reales | Nadie lee la documentación antes de probar |
| Mensajes de error que dicen qué hacer | «Falta el precio: añadir <nombre> <precio>» |
| Código de salida correcto | Para poder encadenarla con otras |
| Silencio cuando todo va bien | Un programa que grita no se puede automatizar |
| Confirmar lo destructivo | Borrar sin preguntar se paga caro |
El error dice qué esperaba y qué recibió
«Datos inválidos» no sirve para nada. «El precio debe ser un número mayor que cero; se recibió "abc"» dice el problema, el valor y la regla, y quien lo lee sabe qué escribir a continuación.
Es lo mismo que exigías a tus mensajes de validación en la UD4, ahora sin interfaz donde esconderlo.
Salida legible
console.table(productos.map(({ id, nombre, precio, stock }) => ({
id, nombre, precio, stock
})));
console.table también existe en Node, y para una lista de objetos es la diferencia entre una salida que se lee y un volcado que no.
Tarea 6 · El CLI completo
- Implementa
listar,buscar,ver,añadir,borraryayuda. - Valida los argumentos de cada uno con las funciones de la UD3.
- Escribe mensajes de error que digan qué se esperaba.
- Devuelve el código de salida correcto en cada caso.
- Pide confirmación antes de borrar.
- Dale el programa a un compañero, sin explicarle nada, y anota dónde se atasca.
--json que imprima el resultado sin formato.Cierre de la semana 2
- El proyecto se arranca leyendo solo el
package.json. - Entiendes el versionado y el fichero de bloqueo.
- Tu herramienta valida, informa y termina con el código correcto.
- Sigues sin instalar dependencias.
Ver respuestas
1 · Explicar cómo se usa y terminar con un código de error.
2 · Qué se esperaba, qué se recibió y cuál es la forma correcta.
3 · Porque un programa silencioso cuando todo va bien se puede encadenar con otros.
Microprueba semanal 2 · 5–10 minutos
Individual, sin IA y sin apuntes.
- ¿Qué versiones acepta
^3.2.1? Escribe dos que sí y una que no. - Di cuáles de estos tres se suben al repositorio:
node_modules,package-lock.jsony.env. - Escribe dos preguntas que te harías antes de instalar una dependencia.