Я пытался установить RequireJS для обработки круговых зависимостей с использованием the special 'exports' magic module, как рекомендовано James Burke's answer, до this question.RequireJS, круговые зависимости и экспорт «Волшебный» метод
После примере, приведенном @jrburke в этом вопросе:
define("Employee", ["exports", "Company"], function(Company) {
function Employee(name) {
this.name = name;
this.company = new Company.Company(name + "'s own company");
};
exports.Employee = Employee;
});
define("Company", ["exports", "Employee"], function(Employee) {
function Company(name) {
this.name = name;
this.employees = [];
};
Company.prototype.addEmployee = function(name) {
var employee = new Employee.Employee(name);
this.employees.push(employee);
employee.company = this;
};
exports.Company = Company;
});
Проблема заключается в том, что, используя его собственный пример, то exports
модуль не определен, и поэтому exports.Employee
и exports.Company
не задавать. Если я попытаюсь включить экспорт в качестве аргумента функции определения обратного вызова, он просто инициализирует в обоих случаях пустым и не несет функции конструктора, которые он назначил.
Что я делаю неправильно?
EDIT: Через пробную версию и ошибку я получил приведенный выше код, работающий по адресу: http://jsfiddle.net/jpk45vow/4/. Может кто-нибудь объяснить почему это работает, потому что это не имеет никакого смысла для меня.
похоже, что модуль экспорта не является глобальным объектом. Он имеет локальную область в качестве помощника для экспорта ваших модулей. Вот почему он пуст в основном. Фактически, вам не нужно требовать его и не использовать в своем основном модуле. – amenadiel
Да, после чтения ваших комментариев мне кажется, что то, что делает магический модуль, создает контейнерный объект, очень похожий на тот, который вы создали ниже, за исключением того, что каждый модуль имеет свой собственный контейнер. Затем, когда main требуется модуль, requireJS возвращает контейнер вместо модуля, разрешая все проблемы с зависимостями. –