2011-05-05 12 views
8

Recientemente construí un proyecto usando el Dojo toolkit y me encantó cómo puedes marcar una sección de código para que solo se incluya en la versión compilada basada en un arbitrario conditional check. Utilicé esto para exportar variables privadas para pruebas unitarias o para arrojar errores frente a registrarlos. Aquí hay un ejemplo del formato Dojo, me encantaría saber si hay directivas especiales como esta para el Google Closure Compiler.Usando Google Closure Compiler puede excluir una sección de código fuente de la versión compilada?

window.module = (function(){ 

    //private variable 
    var bar = {hidden:"secret"}; 

    //>>excludeStart("DEBUG", true); 
    //export internal variables for unit testing 
    window.bar = bar; 
    //>>excludeEnd("DEBUG"); 

    //return privileged methods 
    return { 
    foo: function(val){ 
     bar.hidden = val; 
    } 
    }; 
})(); 

Editar

Cierre la guía definitiva menciona que se puede ampliar el CommandLineRunner a añadir sus propios controles y optimizaciones que podrían ser una manera de hacerlo. Plover parece prometedor, ya que es compatible con custom-passes.

+1

saber si se puede utilizar el compilador de cierre en el modo avanzado con Dojo Toolkit? Consulte mi documento: http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t –

Respuesta

3

Closure Compiler es compatible con "define", así:

/** @define {boolean} */ 
var CHANGABLE_ON_THE_COMMAND_LINE = false; 
10

Este caso prueba simple funcionó. Compilar con --define DEBUG=false

/** 
* @define {boolean} DEBUG is provided as a convenience so that debugging code 
* that should not be included in a production js_binary can be easily stripped 
* by specifying --define DEBUG=false to the JSCompiler. For example, most 
* toString() methods should be declared inside an "if (DEBUG)" conditional 
* because they are generally used for debugging purposes and it is difficult 
* for the JSCompiler to statically determine whether they are used. 
*/ 
var DEBUG = true; 

window['module'] = (function(){ 

    //private variable 
    var bar = {hidden:"secret"}; 

    if (DEBUG) { 
    //export internal variables for unit testing 
    window['bar'] = bar; 
    } 

    //return privileged methods 
    return { 
     foo: function(val){ 
     bar.hidden = val; 
     } 
    }; 
})(); 

console.log(window['bar']); 
module.foo("update"); 
console.log(window['bar']); 
+3

Creo que esta respuesta es más correcta que la aceptada, ya que utiliza una opción de cierre incorporada (aunque no documentada) que está más en línea con la forma "correcta" de hacer las cosas. La respuesta también es más larga e incluye un ejemplo. –

+0

@LeeHambley, ¿qué? Aparte de "largo y ejemplo", ¿cómo esas respuestas son diferentes en algo? Ambos te dan '/ ** @define {boolean} * /' anotación. –

Cuestiones relacionadas