Sistema de módulos en Node.js (CommonJS)

Artículo de conceptos básicos del manejo módulos en Nodejs. Sistema CommonJS en conjunto del objeto module y funciones require export.

Introducción

Saber conocer los sistemas de módulos en la plataforma a desarrollar es de gran utilidad, ya que nos brindan un mejor entendimiento del ecosistema. En este caso, Nodejs se compone de un sistema de módulo fácil de comprender y de utilizar.

CommonJS

CommonJS nace el año 2009 como un proyecto para establecer convenciones en el ecosistema de módulos para Javascript fuera del navegador. En ese entonces, Javascript carecía de formas comunes estandarizadas para la reutilización de piezas de software en entornos diferentes al navegador web. Unos años más tarde el equipo de Nodejs lo implemento en versiones entrantes. Actualmente el desarrollo de Javacript en el lado del servidor, lo usa por defecto.

Objeto module

Es un objeto nativo de Nodejs que registra todas las referencias de los módulos actuales de nuestra aplicación. Esto incluye la referencia a node_modules, en donde se podrán obtener funcionalidades con tan solo realizar las importaciones respectivas.

Aquí una inspección del objeto module:

console.log(module);

Esto imprime el siguiente resultado en la consola:

Module {
id: '.',
path: 'C:\\Users\\Admin\\Documents\\TEST_AREA_JS',
exports: {},
parent: null,
filename: 'C:\\Users\\Admin\\Documents\\TEST_AREA_JS\\foo.js',
loaded: false,
children: [],
paths: [
'C:\\Users\\Admin\\Documents\\TEST_AREA_JS\\node_modules',
'C:\\Users\\Admin\\Documents\\node_modules',
'C:\\Users\\Admin\\node_modules',
'C:\\Users\\node_modules',
'C:\\node_modules'
]
}

NOTA: Para más información sobre el sistema de modulos de Nodejs consultar: https://nodejs.org/api/modules.html

Export

La declaración export es una propiedad del objeto module que se utiliza para enlazar la referencia del fichero actual. Gracias a enlace tendremos a nuestra disposición funciones, objetos, o variables del contexto actual para que puedan ser usados por otros programas.

Aquí ejemplo de exportación de 2 funcionalidades de un fichero creado llamado math.js:

const sum = (a,b) => {
return a + b;
}
const sub = (a,b) => {
return a - b;
}
module.exports = {
sum,
sub
}

Si inspeccionamos nuevamente el objeto module obtendremos el siguiente resultado:

Module {
id: '.',
path: 'C:\\Users\\Admin\\Documents\\TEST_AREA_JS',
exports: { sum: [Function: sum], sub: [Function: sub] },
parent: null,
filename: 'C:\\Users\\Admin\\Documents\\TEST_AREA_JS\\math.js',
loaded: false,
children: [],
paths: [
'C:\\Users\\Admin\\Documents\\TEST_AREA_JS\\node_modules',
'C:\\Users\\Admin\\Documents\\node_modules',
'C:\\Users\\Admin\\node_modules',
'C:\\Users\\node_modules',
'C:\\node_modules'
]
}

Destacando la propiedad exports que contiene lo siguiente:

exports: { sum: [Function: sum], sub: [Function: sub] },

Require

Una vez exportado el módulo ahora debemos usarlo, para este caso tenemos la sentencia require, que es básicamente una función que obtiene lo solicitado buscando en las referencias del objeto module.

Aquí ejemplo de importación de las 2 funcionalidades anteriores del fichero creado llamado math.js:

const math = require('./math');console.log(math.sum(1,2));
console.log(math.sub(2,1));

Esto imprime el siguiente resultado en la consola:

3
1

La función require es una de las funciones más importantes en node, ya que con esta función podemos obtener módulos core, módulos de terceros y nuestros propios ficheros.

Aquí un ejemplo de algunas líneas iniciales de una aplicación node express que utiliza require para obtener las funcionalidades necesarias para trabajar.

const express = require('express');
const morgan = require('morgan');
const path = require('path');
const DEFAULT_PORT = process.env.PORT || 6420;....

Terminando

Recordar que el sistema de módulos en Javascript es diferente dependiendo del ambiente. En el navegador se emplea otro sistema de módulo llamado ES modules como estándar. Los frameworks modernos del lado del cliente lo utilizan para construir sus aplicaciones. En nodejs se puede utilizar también, pero se debe realizar unas pequeñas configuraciones. la invitación es seguir aprendiendo del ecosistema para balancear dependiendo de la necesidad.

--

--

--

Software engineer

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Diego Esteban Cortés

Diego Esteban Cortés

Software engineer

More from Medium

Send SMS through your Node.js app 🚀

Thumbnail

Differences Between the Technologies: Express JS vs Node Js

What Is The MERN Stack, and How Does It Work?

Revue API for Newsletter Integration: React, Express & Node JavaScript