Preventing closure compiler from renaming certain variables
Solution 1
Using Closure Compiler web app, you can set js_externs
. Refer to Advanced Compilation and Externs for more examples.
// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// @js_externs _gat
// ==/ClosureCompiler==
Solution 2
Use the goog.exportSymbol function from base.js. Documentation is here: http://closure-library.googlecode.com/svn/docs/closure_goog_base.js.html
Usage is like
goog.exportSymbol("_gat", _gat)
Solution 3
See http://closuretools.blogspot.com/2011/01/property-by-any-other-name-part-1.html the part about "All Unquoted"
putting certain vars inside ' ' >>> 'bob' prevents them from being renamed by the compiler
Solution 4
If it isn't declared as part of the code you are compiling than an extern declaration is appropriate: http://code.google.com/closure/compiler/docs/api-tutorial3.html#externs
phidah
Updated on June 14, 2022Comments
-
phidah about 2 years
I have a javascript file with a global object that must not be renamed (
_gat
from the Google Analytics async tracker).This object must not be renamed by the Google Closure Compiler as Google Analytics looks for a variable with this specific name.
I've looked into the Javascript Doc notations that are mentioned: http://code.google.com/closure/compiler/docs/js-for-compiler.html - However, I cannot find anything regarding the "protection" of a variable.
The problem exists no matter if I use simple or advanced compilation.
How can I ensure that the
_gat
variable is not renamed? -
phidah about 14 yearsCan you elaborate a bit on that please? Where do I find further information?
-
Moishe Lettvin about 14 years(Sorry for the terse initial reply, was replying from my phone and my screen-keyboard-fu is weak).
-
Noah Sussman almost 12 yearsThis is an interesting option. Even when performing ADVANCED_OPTIMIZATIONS, Closure will not rename string references to methods. Eg it will not rename window.foo if referenced like: window['foo']