Sistema de módulos

Los módulos son unidades de código qué están compuestos por otros módulos; los paquetes son expuestos en módulos, un archivo podría considerarse un módulo, inclusive las librerías son módulos.

Objetivos

  • Aprender cómo se cargan los módulos.

  • Conocer cómo crear módulos.

  • Buscar la ruta de los módulos.

  • Detectar si un módulo es el punto de entrada de una aplicación.

Creando un módulo

Ejemplo:

Desarrollaremos un módulo que imprima en pantalla según severidad, recibirá de argumento de entrada el tipo y el mensaje.

const logging = (type, message) => {
  if (!type || !message) {
    throw new Error('Los atributos type y message son obligatorios');
  }
  switch (type) {
    case 'info':
      console.info(message);
      break;
    case 'error':
      console.error(message);
      break;
    case 'warning':
      console.warn(message);
      break;
    default:
      console.log(message);
  }
};

module.exports = {
  logging
};

En la imagen anterior podemos observar que cargamos nuestro módulo con require, podemos incluir la extensión (.js), pero no es necesario; la forma en que retornamos el contenido de nuestro archivo es a través de module.exports.

Detectando el módulo principal

Si deseamos que nuestro módulo opere como un programa/servicio y que al mismo tiempo pueda ser cargado como módulo, utilizaremos dos alternativas: module.parent === null o require.main === module.

Ejemplo:

const { logging } = require('./logModule');

if (require.main === module) {
  logging('info', 'Ejecutando como programa principal');
} else {
  const process = (message) => {
    logging('warn', message);
  };
  module.exports = process;
}

Resolviendo la ruta de un módulo

Para determinar la ruta absoluta de cualquier módulo requerido utilizaremos el método resolve de la función require.

Ejemplo:

console.log();
console.group('# Package resolution');
console.info("require('signale')", '=>', require.resolve('signale'));
console.groupEnd();
console.log();

console.group('# Directory resolution');
console.info("require('.');", '=>', require.resolve('.'));
console.groupEnd();
console.log();

console.group('# File resolution');
console.info("require('./logModule');", '=>', require.resolve('./logModule'));
console.groupEnd();
console.log();

console.group('# Core APIs resolution');
console.info("require('fs')", '=>', require.resolve('fs'));
console.groupEnd();
console.log();

Last updated

Was this helpful?