Как требуется () в узле.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 61

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 происходит последовательность задач:

  1. вызов Module.prototype.require функции, объявленные в lib / модуль.js, которые утверждают, что путь существует и строку

  2. вызов Module._load которая является функцией в lib / модуль.js что разрешить файл через Module._resolveFilename(request, parent, isMain),

  3. the Module._resolveFilename функция вызывается и проверяет, является ли модуль собственным (собственные модули возвращаются

источник доступен здесь рядом с загрузками:http://nodejs.org/ exports / require-это ключевые слова, я не думаю, что они напрямую закодированы в javascript. Узел кодируется на C++, javascript-это просто оболочка сценариев вокруг ядра C++.