Saltar al contenido
Curso de Node.js y APIs
Todos los cursos

Ejercicio: Módulos: CommonJS, ES Modules, fs y path

  • ⏱ 40 minutos
  • 📶 Nivel: principiante

Objetivo

Practicar con módulos y archivos reales en tu computadora, y escribir tres funciones de JavaScript puro que procesan lo que normalmente llega de process.argv y de un archivo CSV.

Cómo se trabaja

La parte A se hace en tu computadora: creas un pequeño proyecto con dos módulos y lees y escribes archivos. La parte B son tres funciones de JavaScript puro que puedes probar aquí y comprobar en el navegador. Pega solo las funciones, sin <script>.

▶ Prueba tu código aquí (opcional)
Consola

Pasos

Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.

💡 Pista 1: parsearArgumentos

Recorre el array con un for con índice. Cuando uses el siguiente argumento como valor, incrementa i otra vez para saltarlo.

💡 Pista 2: cambiarExtension

"datos/notas.txt".lastIndexOf(".") da la posición del último punto; con slice(0, posicion) te quedas con la parte anterior. Si devuelve -1, no hay extensión.

💡 Pista 3: csvAObjetos

texto.split("\n") separa las líneas. Cada línea se separa por "," con otro split y se desestructura: const [nombre, edad] = linea.split(",").

🔎 Comprueba tu trabajo

Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista. Pega solo el JavaScript, sin las etiquetas <script>.

    ✅ Ver una solución posible

    Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.

    funciones.js
    function parsearArgumentos(args) {
      const resultado = { _: [] };
      for (let i = 0; i < args.length; i++) {
        const actual = args[i];
        if (actual.startsWith("--")) {
          const clave = actual.slice(2);
          const siguiente = args[i + 1];
          if (siguiente !== undefined && !siguiente.startsWith("--")) {
            resultado[clave] = siguiente;
            i++;
          } else {
            resultado[clave] = true;
          }
        } else {
          resultado._.push(actual);
        }
      }
      return resultado;
    }
    
    function cambiarExtension(ruta, nueva) {
      const punto = ruta.lastIndexOf(".");
      const base = punto === -1 ? ruta : ruta.slice(0, punto);
      return `${base}.${nueva}`;
    }
    
    function csvAObjetos(texto) {
      return texto
        .split("\n")
        .filter((linea) => linea.trim() !== "")
        .map((linea) => {
          const [nombre, edad] = linea.split(",");
          return { nombre, edad: Number(edad) };
        });
    }

    💡 🏁 Reto extra (opcional)

    Añade a app.js una opción --mayus que, usando parsearArgumentos, escriba el resumen en mayúsculas. Importa parsearArgumentos desde un módulo propio.