Creando mi primer módulo en Node.js: Manos a la obra

Creando mi primer módulo en Node.js: Manos a la obra

¿Qué es un módulo de Nodejs?

Un modulo es un bloque de código reutilizable cuya existencia no impacta de manera accidental otros bloques de código.

Javascript, al menos antes de ES6 no tenia una forma estandarizada de organizar el código de manera que un bloque de código no impactara otro. Existían formas prevenirlo pero no propiamente como parte del lenguaje.

¿Qué es CommonJS?

CommonJS es una forma estandarizada en la forma en la que los módulos deben de ser estructurados. Es decir la forma en la que organizamos el código Javascript.

¿Qué son las funciones de primera clase (first class functions)?

Javascript permite el uso de funciones de primer clase (First Class Functions), es decir que podemos asignar una función a una variable.

var saludar = function () {
    console.log("Hola !");
};

saludar();

E incluso podemos pasar funciones como parámetros.

var saludar = function () {
    console.log("Hola");
};

var queHacer = function (fun) {
    fun();
};

queHacer(saludar);

¿Cómo crear un módulo en Nodejs?

Vamos a crear el primer módulo que será independiente de los otros módulos.

  1. Dentro del espacio de trabajo vamos a crear el folder 02_primer_modulo, aquí es donde vamos a trabajar.

  2. Creamos el archivo saludar.js con el siguiente código para imprimir el Hola.

    // saludar.js
    console.log("Hola");
    
  3. Creamos ahora el archivo app.js con el cual vamos a mandar llamar el módulo saludar.

    // app.js
    require("./saludar.js");
    
  4. Ejecutamos ahora app.js.

    $ node app.js
    

    Imprimirá el mensaje Hola.

  5. Ahora vamos a modificar un poco el módulo saludar para encapsular el saludo.

    // saludar.js
    var saludar = function () {
        console.log("Hola");
    };
    
  6. Si invocamos la función saludar desde app.js vamos a ver que no es posible.

    // app.js
    require("./saludar.js");
    saludar();
    
    $ node app.js
    

    Aquí vamos a recibir una notificación de error, y lo que sucede es que aunque hemos invocado al módulo, la función que existe dentro de este no puede ser invocada de esta forma. Esto esta echo intencionalmente así en node para evitar que varias funciones en diferentes módulos tengan el mismo nombre y colisionen entre si.

  7. Dentro del modulo saludar.js vamos a decirle que exportar.

    // saludar.js
    var saludar = function () {
        console.log("Hola");
    };
    
    module.exports = saludar;
    

    Estamos diciéndole al modulo saludar que la parte que exportamos es la función función saludar.

    // app.js
    var saludar = require("./saludar");
    saludar();
    

    Y ahora a nivel del modulo app hemos capturado la saluda del modulo saludar en una variable con el mismo nombre. En esta ocasión si podemos ejecutarla.

    Cuando utilizo la función require, si no especifico la extensión del modulo, por default node asume que es .js, en el código lo hice así.