Предотвращение закрытия компилятором переименования определенных переменных - PullRequest
15 голосов
/ 12 июня 2010

У меня есть файл JavaScript с глобальным объектом, который нельзя переименовывать (_gat из асинхронного трекера Google Analytics).

Этот объект не должен быть переименован компилятором Google Closure, так как Google Analytics ищет переменную с этим конкретным именем.

Я просмотрел упомянутые нотации Javascript Doc: http://code.google.com/closure/compiler/docs/js-for-compiler.html - Однако я не могу найти ничего относительно «защиты» переменной.

Проблема существует независимо от того, использую я простую или расширенную компиляцию.

Как я могу убедиться, что переменная _gat не переименована?

Ответы [ 4 ]

16 голосов
/ 07 августа 2010

Используя Closure Compiler веб-приложение, вы можете установить js_externs.Обратитесь к Advanced Compilation и Externs для большего количества примеров.

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// @js_externs _gat
// ==/ClosureCompiler==
6 голосов
/ 12 июня 2010

Используйте функцию goog.exportSymbol из base.js. Документация находится здесь: http://closure -library.googlecode.com / svn / docs / closure_goog_base.js.html

Использование как

goog.exportSymbol("_gat", _gat)
3 голосов
/ 16 августа 2011

См. http://closuretools.blogspot.com/2011/01/property-by-any-other-name-part-1.html часть о "Все без кавычек"

размещение некоторых переменных внутри '' >>> 'bob' предотвращает их переименование компилятором

2 голосов
/ 29 июня 2010

Если он не объявлен как часть кода, который вы компилируете, тогда подходит внешнее объявление: http://code.google.com/closure/compiler/docs/api-tutorial3.html#externs

...