Я использую Google Closure Compiler в проекте Drupal прямо сейчас. Мой Javascript структурирован с использованием Javascript Module Pattern.Javascript Module Pattern и Google Closure Compiler
Из-за того, как работает Drupal, я собираю каждый JS-файл по отдельности. Режим простой компиляции работает хорошо, но я хотел бы использовать Advanced Compilation для каждого файла.
Мои файлы все вариации на
var FOO = (function(me, $, Drupal, undefined) {
function init (context, settings) {
do_sutff();
};
Drupal.behaviors['FOO'] = {
attach: init
};
return me;
}(FOO || {}, jQuery, Drupal));
Моя проблема заключается в том, что Drupal.behaviors
является конкретный объект в Drupal и attach
свойство также является специфическим свойством. Когда страница Drupal отображается, Drupal.behaviors
получает петлю, и все функции attach
вызываются с соответствующими аргументами. Другими словами, я не хочу что-нибудь переименовано в объект Drupal.
При использовании режима Advanced компиляции, я получаю
var c = function(a, d, b) {
b.b.FOO = {a:function() {
do_stuff()
}};
return a
}(c || {}, jQuery, Drupal);
Я пробовал много вариаций на попытку получить компилятор распознавать весь Drupal
объект как экстерн без удачи. Независимо от того, что я пытаюсь, .behaviors
и .attach
всегда переименовываются.
Есть ли способ рассказать компилятору, что руки не могут быть удалены из целого объекта?
i get b.behaviors.FOO = {attach: function() {}}; ... – dandavis
@ dandavis Я получаю это с SIMPLE_OPTIMIZATIONS. Когда я использую ADVANCED_OPTIMIZATIONS, объект «Drupal» становится обработанным, как показывает редактирование. – mpdonadio
var o = Drupal ['behaviors'] ['FOO']; о [ 'прикрепить'] = INIT; – dandavis