views:

137

answers:

3

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?

+2  A: 

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)
Moishe
Can you elaborate a bit on that please? Where do I find further information?
phidah
(Sorry for the terse initial reply, was replying from my phone and my screen-keyboard-fu is weak).
Moishe
A: 

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

John
+1  A: 

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==
Kevin Hakanson