Google Closure Compileを使用して ADVANCED_OPTIMIZATIONS で次のコードをコンパイルしています 。
(function() {
/** @const */
var DEBUG = false;
var Namespace = {};
window['Namespace'] = Namespace;
(function() {
/**
* @constructor
*/
function Test(tpl) {
Helper.debug('Test');
}
Namespace['Test'] = Test;
})();
var Helper =
(function(){
/**
* @constructor
*/
function Helper(){
this.debug = function(arg){
if(DEBUG){
console.log(arg);
}
}
};
return new Helper;
})();
})();
私の意図は、コンパイラDEBUG == false
がDEBUG == true
. 私はコンパイラからこのようなものを望んでいます:
DEBUG == false
:
var a={};window.Namespace=a;a.Test=function(){};
DEBUG == true
:
var a={};window.Namespace=a;a.Test=function(){console.log("Test")};
代わりにこれで終わります:
DEBUG == false
:
var a={};window.Namespace=a;a.Test=function(){b.debug("Test")};var b=new function(){this.debug=function(){}};
DEBUG == true
:
var a={};window.Namespace=a;a.Test=function(){b.debug("Test")};var b=new function(){this.debug=function(c){console.log(c)}};
どちらの場合も、debug
関数の名前は変更されません。エクスポートされておらず、(私が知る限り)からアクセスできないため、そうあるべきだと思いますNamespace
。Namespace.Test()
コンストラクタからのみ呼び出されます。そこから呼び出さないと、Closure はデバッグ関数を削除しますが (どこでも使用されていないため)、名前空間の関数を介して呼び出すことができ、名前を変更できるようにしたいと考えています。
上記のコードのさまざまなバージョンを試しました。でprototype.debugを使用しHelper
、ヘルパーコンストラクターを名前空間と同じスコープに移動するなど。ただし、デバッグ関数がヘルパーオブジェクトにアタッチされている限り、コンパイラーから目的の出力を取得する方法が見つかりません。
ヘルパー オブジェクトを使用せずdebug
、関数として宣言するだけで、目的の出力が正確に得られますが、これは単なる例であり、実際にはヘルパー オブジェクトに関連付けられている多くの関数があり、それらすべてを使用したいと考えています。短い名前に変更されます。希望の出力が得られるコード例:
(function() {
/** @const */
var DEBUG = false;
var Namespace = {};
window['Namespace'] = Namespace;
(function() {
/**
* @constructor
*/
function Test(tpl) {
debug('Test');
}
Namespace['Test'] = Test;
})();
function debug(arg){
if(DEBUG){
console.log(arg);
}
}
})();