Использование глобального объекта для этого было проблематичным для меня. Вот простой пример, иллюстрирующий мою проблему:
In a.js
:
goog.provide('app.a');
goog.require('app.b');
app.a = function () {
return [
app.b('Hey, there!'),
app.c('yo')
];
};
Обратите внимание, что в приведенном выше файле я использую app.c
без явного требования.
In b.js
:
goog.provide('app.b');
goog.require('app.c');
app.b = function (msg) {
return app.c('b ' + msg);
};
In c.js
:
goog.provide('app.c');
app.c = function (msg) {
return { msg: msg };
};
Я могу запустить это через closurebuilder, и он будет работать нормально. Он также будет работать без ошибок в браузере. Но мне не нравится, как app.c
можно использовать без явного требования.
Лучшее решение, которое я могу придумать, это если бы каждый файл каким-то образом мог использовать свою собственную копию глобальной переменной app
, созданной из вызовов goog.require
. Это приведет к ошибкам во время выполнения, когда вы попытаетесь использовать что-то, что не было require
d. Не уверен, что это возможно.
Есть ли способ сделать то, что я описал, или есть какая-то альтернатива?