(сжатие дублирующих символов - это то, для чего предназначен GZIP).

e Closure Compiler переименовывает все «true», «false» и «null» вхождения в коде как;

var s = true, x = null, V = false;

и вместо этого использует эти сокращения; в таких условиях, как;

if (someVariable == s)

в настоящее время; Код Google Analytics определяет свою собственную переменную "s"; переопределение значения «истина»; и, как вы можете видеть, это вызывает много проблем.

Я не хочу менять код GA; Я просто хочу, чтобы Closure Compiler прекратил переименовывать в true и т. Д. Внешние не работают.

Вы знаете какой-нибудь способ сделать это?

 El Ronnoco06 янв. 2011 г., 20:01
Можете ли вы предоставить свои собственные константы, например_true_=true и затем заменить их перед запуском через Closure Compiler?

Ответы на вопрос(3)

что ваш код работает в глобальной области видимости / именах, и поэтому происходит сбой.

Чтобы исправить это, положите его воболочка анонимной функции:

(function() {
    // a self contained "namespace"
    var s = true; // won't be affected by the analytics code anymore       


    // expose something
    window.foo = function() {};

})(); // execute the function immediately

Это общая идиома предотвращения конфликтов имен переменных и т. д. Если вам нужно сделать вещи доступными вне оболочки, просто добавьте их как свойства вwindow объект.

Не беспокойтесь о замыкании, когда вы изменяете свой код, он может дать переменным разные имена. И что тогда, когда на вашей странице вдруг появятся более глобальные переменные? Все эти проблемы являются вескими причинами, чтобы всегда помещать ваш код в оболочку, как описано выше.

 dashersw06 янв. 2011 г., 20:24
На самом деле, я ничего не переименовываю. У меня есть несколько файлов, которые запускаются через CC (закрывающий компилятор) за один раз; и все коды в каждом отдельном файле имеют свое собственное пространство имен с оболочкой анонимной функции, как в вашем примере. Просто «странно» CC переименовывает «true», «false» и «null» в глобальном пространстве имен. И я не могу изменить то, как действует CC.

CompilerOptions называетсяaliasKeywords, Когда установленоfalseкомпилятор не будет иметь псевдонимы 'true', 'false' и 'null'.

 Alexander O'Mara13 нояб. 2017 г., 02:05
Это было то, что я искал. Для будущих посетителей, к счастью, эта неэффективная функция была удалена в 2015 году.[1] [2] (сжатие дублирующих символов - это то, для чего предназначен GZIP).
Решение Вопроса

можно запретить Google Closure Compiler выводить глобальные определения (функции и / или переменные) с помощью параметра с именем output_wrapper в код командной строки, например;

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --output_wrapper "(function(){%output%})();" --js input.js --js_output_file output.js

Таким образом, он не сталкивается с глобальными переменными и печатает весь ваш код в обертке анонимной функции.

 eggsy8401 июн. 2012 г., 11:35
Я бы посоветовал использовать этот метод вместо добавления анонимной функции в ваш предварительно запутанный код. Это связано с тем, что компилятор Closure помещает значения true, false и null в глобальное пространство имен, что может вызвать конфликты с другими JS.

Ваш ответ на вопрос