Los módulos para Node JS son Singletons

Los módulos de NPM una vez llamado pasan al cache del proceso convirtiéndose de esa manera en Singleton.

autor Rodríguez Patiño, Eduardo
publicado
visitas 1,056

En esta nueva entrada vamos hablar acerca de los módulos en NPM.

¿Qué son?

Los módulos nos permiten organizar nuestro código para hacer un sistema más modular en vez de tener todo el código puesto en un solo archivo.

Por ejemplo, esto sería la definición básica de un módulo.

class SomethingAwesome { }

module.exports = new SomethingAwesome();

Y su llamada sería la siguiente

const somethingAwesome require('./myClass.js');

¿Por que dicen que es Singleton?

Porque el módulo al ser llamado forma parte del cache del proceso de nuestra aplicación. Por lo tanto, la segunda vez que sea llamado vendrá del cache.

Pequeño ejercicio

La instancia de una clase siempre es única, asi es tengan los mismos valores. Veamos el siguiente código.

class SomethingAwesome {}

const a = new SomethingAwesome(),
      b = new SomethingAwesome();

console.log(a === b);

El resultado del ejercicio anterior será false, porque como mencioné las instancias siempre son únicas. Sino me creen, pueden probar el código en la consola del browser y corroborarlo por ustedes mismos.

Que pasaría ..

Si hacemos lo mismo pero llamando al módulo 2 veces.

class SomethingAwesome { }

module.exports = new SomethingAwesome();

Este módulo lo que hace es retornar la instancia de un objeto. Así que vamos a ponerlo a prueba.

const a = require('./myClass.js'),
      b = require('./myClass.js');

console.log(a === b);

El resultado es TRUE.

¿Por qué?

Como mencioné, el módulo pasa a ser parte del proceso del cache de la aplicación pasando a resolver la misma instancia.

Tengan cuidado

El cache es asociado al nombre del fichero llamado. Así que podríamos crear otro cache si llamamos al fichero haciendo uso de UPPERCASE. Aunque esto fallaría más en Windows.

const a = require('./myclass.js'),
      b = require('./MYCLASS.js');

console.log(a === b);

Esto sería false porque el fichero fue llamado primero en minúscula y luego en mayúscula.

- Nuestros cursos -