Ho un'API di registrazione che desidero esporre a un codice JS interno. Voglio essere in grado di utilizzare questa API per accedere, ma solo quando eseguo una build di debug. In questo momento, ho parzialmente funzionante. Registra solo le build di debug, ma le chiamate a questa API sono ancora nel codice quando c'è una build regolare. Vorrei che il compilatore di chiusura rimuova questo codice essenzialmente morto quando eseguo il compilatore con goog.DEBUG = false.Utilizza la funzione di registro del registro di chiusura del compilatore
definizione Log:
goog.provide('com.foo.android.Log');
com.foo.Log.e = function(message){
goog.DEBUG && AndroidLog.e(message);
}
goog.export(com.foo.Log, "e", com.foo.Log.e);
AndroidLog è un oggetto Java fornito al WebView questo verrà eseguito in, e adeguatamente externed come questo:
var AndroidLog = {};
/**
* Log out to the error console
*
* @param {string} message The message to log
*/
AndroidLog.e = function(message) {};
Poi, nel mio codice, posso usare :
com.foo.Log.e("Hello!"); // I want these stripped in production builds
La mia domanda è questa: come posso fornire questa API, utilizzare questa API in tutto il mio codice, ma poi h hai rimosse le chiamate a questa API quando non sono state compilate con goog.DEBUG = true? In questo momento, il mio codice base sta diventando gonfio con un sacco di chiamate all'API Log che non vengono mai chiamate. Voglio il rimosso.
Grazie!
OK, dopo qualche ulteriore scavo, sembra che funzioni externed non sono inline. http://code.google.com/p/closure-compiler/issues/detail?id = 230 Mi piacerebbe ancora trovare una soluzione alternativa all'apertura di ogni chiamata con goog.DEBUG && –
Ho scritto io stesso un piccolo script in Python per rimuovere tutti i miei messaggi di debug dal sorgente come parte del mio processo di compilazione. Potrei trovare qualcosa anche quando ne avevo bisogno. È strano perché dovrebbe essere un bisogno così comune. – jfriend00
Sì, posso seguire questa strada :) –