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:
-
llamar
Module.prototype.require
función declarada en lib/module.js que afirma que la ruta existe y era una string -
llamar
Module._load
que es una función en lib/module.js que resuelve el archivo a través deModule._resolveFilename(request, parent, isMain)
, - la
Module._resolveFilename
se llama a la función y comprueba si el módulo es nativo (los módulos nativos son devueltos porNativeModule
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 deModule._resolveLookupPaths
función definida en definida en lib/internal/bootstrap_node.js - comprobar el directorio que contiene el archivo
- 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“
- luego creará un nuevo módulo para el archivo dado en el argumento
var module = new Module(filename, parent);
- 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 - la
NativeModule.wrap
definido en lib/internal/bootstrap_node.js toma el contenido de javascript compilado demod.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 enmod.js
está envuelto en una expresión de función. eso significa que todo lo que escribe en el nodo se ejecuta en V8 - un módulo. exportaciones es lo que se devuelve
Sección de Reseñas y Valoraciones
Recuerda difundir este enunciado si te fue útil.