Как требуется () в узле.js работает?
Я попытался это:
// mod.js
var a = 1;
this.b = 2;
exports.c = 3;
// test.js
var mod = require('./mod.js');
console.log(mod.a); // undefined
console.log(mod.b); // 2
console.log(mod.c); // 3, so this === exports?
поэтому я изображение, которое требует () может быть реализовано следующим образом:
var require = function (file) {
var exports = {};
var run = function (file) {
// include "file" here and run
};
run.apply(exports, [file]);
return exports;
}
Это верно? Пожалуйста, помогите мне понять require (), или где я могу найти исходный код. Спасибо!
4 ответа:
исходный код здесь.
exports
/require
- это не ключевые слова, а глобальные переменные. Ваш основной скрипт завернут до start в функции, которая имеет все глобалы, такие какrequire
,process
etc в его контексте.обратите внимание, что в то время как модуль.сам JS-это с помощью
require()
, это другая функция require, и это определена в файле под названием "узел.ОАО"побочный эффект выше: это совершенно нормально имейте оператор " return "в середине вашего модуля (не принадлежащий ни к какой функции), эффективно" комментируя " остальную часть кода
Андрей показал исходный код, но если вы также задаетесь вопросом, как его использовать, простое и простое объяснение здесь (http://nodejs.org/api/modules.html).
Это были два хороших примера для меня.
//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; } }; }
мой любимый шаблон
(function (controller) { controller.init = function (app) { app.get("/", function (req, res) { res.render("index", {}); }); }; })(module.exports);
var mod = require('./mod.js');
require-это функция, которая принимает один аргумент, называемый path, в этом случае путь
./mod.js
при вызове require происходит последовательность задач:
вызов
Module.prototype.require
функции, объявленные в lib / модуль.js, которые утверждают, что путь существует и строкувызов
Module._load
которая является функцией в lib / модуль.js что разрешить файл черезModule._resolveFilename(request, parent, isMain)
,- the
Module._resolveFilename
функция вызывается и проверяет, является ли модуль собственным (собственные модули возвращаются
источник доступен здесь рядом с загрузками:http://nodejs.org/ exports / require-это ключевые слова, я не думаю, что они напрямую закодированы в javascript. Узел кодируется на C++, javascript-это просто оболочка сценариев вокруг ядра C++.