Contenido del curso

Dominios en detalle de la certificación JSNAD

require.main.paths en Node.js

Resumen

El dominio de module system representa el 7% de la certificación JSNAD y evalúa tu manejo del sistema de módulos en Node.js. Aquí entiendes cómo resolver las tareas 10.1 y 10.2, qué diferencia a CommonJS de ES Modules y por qué conviene priorizar el sistema nativo cuando tienes opción.

¿Qué evalúa el dominio module system en la JSNAD?

El examen incluye dos tareas específicas dentro de este dominio: task 10.1 y task 10.2. Ambas miden si dominas los dos sistemas de módulos que conviven hoy en el core de Node.js.

  • CommonJS: el sistema original de Node.js, basado en require y module.exports.
  • ES Modules (también llamado ESM o EMS): el sistema añadido al core de Node hace aproximadamente tres años, basado en import y export.

Este dominio creció en complejidad cuando ES Modules entró al core. Antes era un terreno más sencillo, ahora exige conocer ambos universos y la documentación oficial de cada uno dentro de la API de Node [01:00].

¿Qué es CommonJS en Node.js? Es el sistema de módulos nativo de Node, donde usas require() para importar y module.exports para exportar. Sigue siendo el enfoque por defecto en muchos proyectos.

¿Cómo elegir entre CommonJS y ES Modules en el examen?

La recomendación práctica es clara: si la pregunta te permite elegir, usa CommonJS. Las soluciones suelen ser más cortas y naturales de implementar.

Algunas preguntas te obligan a usar CommonJS de forma explícita. Otras te dejan elegir entre ESM o el sistema nativo. Identificar esa instrucción al inicio del enunciado te ahorra tiempo y errores.

¿Cuándo debo usar ES Modules en lugar de CommonJS? Cuando el enunciado lo pide explícitamente o cuando tu proyecto ya está configurado como módulo ES. Si la tarea acepta ambos, CommonJS suele resolverse en menos líneas.

Cómo resolver una tarea típica del module system paso a paso

Un ejercicio representativo es la task 10.X. El enunciado pide que el archivo answer.js sea un módulo CommonJS ejecutado como script principal y, usando la API de require, imprima en consola un array con todas las rutas disponibles para requerir módulos [02:30].

La nota al final del README aclara algo crítico: This is a CommonJS modules question only. This question cannot be answered with a ES modules approach. Es decir, debes resolverlo con la API de CommonJS sí o sí.

¿Dónde encuentro las rutas disponibles para requerir módulos?

La documentación oficial de CommonJS dentro del core de Node describe la propiedad require.main, que representa el script que se carga al lanzar el programa. Ese objeto tiene varias propiedades, y una de ellas es paths: un arreglo con todas las rutas donde Node buscará módulos al hacer un require [03:30].

Cómo escribir la solución en answer.js

La implementación se reduce a una línea:

js console.log(require.main.paths)

Al ejecutar node answer.js en la carpeta del task 10.X, la consola imprime el arreglo de rutas que el proyecto puede usar para resolver módulos. Ese es exactamente el output esperado [04:15].

¿Qué hace require.main.paths? Devuelve un arreglo con las rutas del sistema de archivos donde Node buscará los módulos solicitados con require, partiendo del script principal hacia arriba en la jerarquía de carpetas.

Claves para dominar el module system en la certificación

Para llegar bien preparado a las tareas 10.1 y 10.2 conviene que tengas presente:

  • Estudiar la documentación oficial de CommonJS y de ES Modules dentro del API del core de Node.
  • Conocer los métodos y propiedades del objeto require, especialmente require.main y require.main.paths.
  • Leer con atención las notas del README de cada tarea: ahí aparece si la pregunta exige CommonJS exclusivamente.
  • Priorizar CommonJS cuando el enunciado permita ambos sistemas, porque la solución suele ser más directa.

En la siguiente clase trabajamos con process y el módulo OS, dos piezas que también pesan en la prueba. ¿Qué parte del module system te genera más dudas? Cuéntame en los comentarios.