8

私は最近、Dojoツールキットを使用してプロジェクトを構築し、任意の条件付きチェックに基づいて、コンパイルされたバージョンにのみ含まれるようにコードのセクションをマークする方法が大好きでした。これを使用して、単体テスト用のプライベート変数をエクスポートしたり、エラーをスローしたり、ログに記録したりしましたこれがDojo形式の例です。GoogleClosureCompilerにこのような特別なディレクティブがあるかどうか知りたいです。

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;
    }
  };
})();

編集

決定的なガイドには、CommandLineRunnerを拡張して、それを行う1つの方法である可能性のある独自のチェックと最適化を追加できることが記載されています。Ploverは、カスタムパスをサポートしているため、有望に見えます。

4

2 に答える 2

10

この単純なテストケースは機能しました。でコンパイル--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']);
于 2011-05-05T21:52:44.203 に答える
3

クロージャコンパイラは、次のような「定義」をサポートします。

/** @define {boolean} */
var CHANGABLE_ON_THE_COMMAND_LINE = false;
于 2011-05-05T19:46:56.063 に答える