16

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?

4 Answers 4

16

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==
Sign up to request clarification or add additional context in comments.

Comments

6

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)

2 Comments

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

1 Comment

This 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']
2

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.