2015-01-23 3 views
1

The Google Closure documentation (ENABLE_DEBUG var을 찾으십시오) 플래그 --define='ENABLE_DEBUG=false'을 컴파일러에 전달하여 변수를 변경할 수있는 방법을 설명합니다. define 옵션은 Google Closure API에서 지원하지 않습니다. 동시에 the wikidebug 옵션이 REST 서비스 (및 API?)에서 지원된다고 말합니다. 그러나 어떻게 코드에서 사용할 수 있습니까? 도움이되지 않는 변수에 따라 창조, 그것은 그대로 유지 :Google Closure API를 사용하여 디버그 코드를 삭제하는 방법은 무엇인가요?

/** @define {boolean} */ 
var debug = true; 

답변

0

당신이 폐쇄 라이브러리 지원을 사용하는 경우 당신이 컴파일러에 보내는 소스의 리셋과 함께 CLOSURE_DEFINES의 정의를 포함 할 수 있습니다.

다음과 같은 당신이 할 수있는 행동이를 보려면 :

http://closure-compiler.appspot.com/home이 결과

// ==ClosureCompiler== 
// @compilation_level ADVANCED_OPTIMIZATIONS 
// @output_file_name default.js 
// @use_closure_library true 
// ==/ClosureCompiler== 

var CLOSURE_DEFINES = { 
    'FOO' : true 
} 

/** @define {boolean} */ 
var FOO = false; 
if (FOO) { 
    alert('me'); 
} 

: 당신이 할 수있는 일의

alert("me"); 
+0

덕분에 같은과 같이됩니다 정의와 MY_DEBUG의 값을 제어 할 수 있습니다. 작동하는 것처럼 보입니다. 그러나 (1) Closure Library를 사용하지 않습니다. 사용하면 파일 크기가 크게 늘어납니다. (2) 나는 당신이 묘사 한 방식으로 그것을 사용하는 이유가 무엇인지 알지 못한다. 결과적으로 원래의 'FOO'가 정의 된 동일한 파일에서'FOO' 변수를 수정해야한다. –

+0

(1) SIMPLE 모드를 사용하고 있다고 가정합니다. ADVANCED 모드에서 Closure의 "base.js"를 포함하여 증가 원인은 0 바이트입니다. (2) 파일을 수정하고 싶다면, @define은 필요 없다. 그렇지 않으면, 약간의 쉘 스크립트를 사용하여 설정 파일을 빌드하거나 스왑하는 것이 쉽고, "--define = 'Foo = X'"를 어딘가에 두는 것보다 훨씬 어렵지는 않습니다. – John

0

예 :

/** @define {boolean} */ 
var MY_DEBUG = false; 

if (MY_DEBUG){ 
    debuga = function(myparam, myparam2){ 
     console.log(myparam, myparam2); 
     // Big debug stuff.. 
    }; 
    debugb = function(myparam, myparam2){ 
     console.log(myparam, myparam2); 
     // Big debug stuff.. 
    }; 
} 
else{ 
    debuga = function(myparam, myparam2){}; 
    debugb = function(myparam, myparam2){}; 
} 

debuga("Hello","World"); 

당신은 --define='MY_DEBUG=false'

그것은이

// SIMPLE_OPTIMIZATION   // ADVANCED_OPTIMIZATION 
var DEBUG=!1;      debuga=function(){}; 
debuga=function(a,b){};   debugb=function(){}; 
debugb=function(a,b){};   debuga("Hello","World"); 
debuga("Hello","World");