Saltar al contenido

¿Cómo funciona require() en node.js?

Posterior a de una extensa búsqueda de información solucionamos esta interrogante que suelen tener muchos los usuarios. Te ofrecemos la respuesta y nuestro objetivo es serte de gran ayuda.

Solución:

El código fuente está aquí. exports/require no son palabras clave, sino variables globales. Su script principal está envuelto antes de comenzar en una función que tiene todos los globales como require, process etc en su contexto.

Tenga en cuenta que mientras module.js en sí está usando require()esa es una función requerida diferente, y está definida en el archivo llamado “node.js”

Efecto secundario de lo anterior: está perfectamente bien tener una declaración de “retorno” en el medio de su módulo (que no pertenece a ninguna función), efectivamente “comentando” el resto del código

Andrey mostró el código fuente, pero si también te preguntas cómo usarlo, la explicación fácil y sencilla está aquí (http://nodejs.org/api/modules.html).

Estos fueron dos buenos ejemplos para mí.

//foo.js, multiple methods
var circle = require('./circle.js');
console.log( 'The area of a circle of radius 4 is ' + circle.area(4));

//circle.js
var PI = Math.PI;
exports.area = function (r) 
  return PI * r * r;
;
exports.circumference = function (r) 
  return 2 * PI * r;
;

//bar.js
var square = require('./square.js');
var mySquare = square(2);
console.log('The area of my square is ' + mySquare.area());

//square.js, single method
module.exports = function(width) 
  return 
    area: function() 
      return width * width;
    
  ;

mi patrón favorito es

(function (controller) 

  controller.init = function (app) 

    app.get("/", function (req, res) 
        res.render("index", );
    );

  ;
)(module.exports);

var mod = require('./mod.js');

Requerir es una función que toma un argumento llamado camino, en este caso el camino es ./mod.js

cuando se invoca el requerimiento, se suceden una secuencia de tareas:

  1. llamar Module.prototype.require función declarada en lib/module.js que afirma que la ruta existe y era una string

  2. llamar Module._load que es una función en lib/module.js que resuelve el archivo a través de Module._resolveFilename(request, parent, isMain),

  3. la Module._resolveFilename se llama a la función y comprueba si el módulo es nativo (los módulos nativos son devueltos por NativeModule función definida en lib/internal/bootstrap_node.js), si es así, devolverá el módulo; de lo contrario, verificará la cantidad de caracteres del parh (debe tener 2 caracteres como mínimo) y algunos caracteres (la ruta debe comenzar por ./) a través de Module._resolveLookupPaths función definida en definida en lib/internal/bootstrap_node.js
  4. comprobar el directorio que contiene el archivo
  5. Si la ruta contiene una extensión (en nuestro ejemplo sí: mod.js), la función de nombre base definida en lib/path.js verifica que la extensión sea “js
  6. luego creará un nuevo módulo para el archivo dado en el argumento var module = new Module(filename, parent);
  7. el contenido se compilará a través de v8 a través de la función NativeModule.prototype.compile definido en lib/internal/bootstrap_node.js
  8. la NativeModule.wrap definido en lib/internal/bootstrap_node.js toma el contenido de javascript compilado de mod.js y lo envuelve: lo envuelve en algún otro código que hace que todo esto funcione. Así que el código que has escrito en mod.js está envuelto en una expresión de función. eso significa que todo lo que escribe en el nodo se ejecuta en V8
  9. un módulo. exportaciones es lo que se devuelve

Sección de Reseñas y Valoraciones

Recuerda difundir este enunciado si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *