7

コンソールを使用してブラウザーでエラーを停止するコンソール ラッパーと、古いブラウザーでのログ記録を有効にするより高度なコンソール ラッパーを見てきました。しかし、デバッグコードのオンとオフを切り替えるのに役立つものはありません。

現時点では、検索と置換を行ってデバッグ コードをコメントアウトしています。もっと良い方法があるはずですか?

YUI を使用して JavaScript を縮小する Combres を使用しています。縮小プロセスで削除する行をマークするために二重のセミコロンを使用することに言及している投稿を見たことがあります。これはハックですか、それとも良い習慣ですか?

4

4 に答える 4

2

おそらく、独自のラッパーを用意console.log()し、そのラッパーを介してデバッグ情報をログに記録する必要があります。そうすれば、本番環境にデプロイした後、その単一の関数を空の関数に置き換えることができるため、コンソールにデバッグ情報が殺到することはありません。console.log実際の関数を空の関数に置き換えることもできますがそうすると、自分だけでなく、Javascriptがコンソールに出力されなくなります。

于 2012-09-05T10:21:33.820 に答える
1

YUI フレームワークがどのようにそれを行うかを見ると、実際には正規表現を使用し、ソースから 3 つのファイルを生成します。ロギング -debug があるもの、ロギングが取り除かれているもの、ファイル名のみ、およびロギングなしの縮小版があります。次に、グローバル構成を設定して、必要なバージョンを指定できます。私は過去にそのように働いており、うまく機能しています。

于 2012-09-05T10:29:04.870 に答える
1

独自のデバッグ関数を定義して、ラッパー アラウンドconsole.logまたは必要なものを定義し、空にした場合にミニファイアがノーオペレーションであると簡単に推測できるようにします。その後、関数本体をコメントアウトすると、ほとんどのミニファイアは、呼び出しまたはインライン化するものがないことを検出し、関数への参照を完全に削除する必要があります。

次に例を示します。

(function() {
   function debug() {
      console.log(arguments)
   }

   function main() {
      debug(123)
      alert("This is production code!")
      debug(456)
   }

   main()
})()

スコープを制限し、ウィンドウに割り当てないようにするために匿名関数に入れました。これdebugにより、ミニファイアーは必要かどうかを簡単に判断できます。このコードをオンライン GCCに貼り付けると、次のようになります。

(function(){function a(){console.log(arguments)}a(123);alert("This is production code!");a(456)})();

しかし、空の//console.logに追加すると、GCC はそれを次のようにコンパイルします。debug

(function(){alert("This is production code!")})();

...デバッグ コードのすべての痕跡を完全に削除します。

于 2012-09-05T11:37:58.387 に答える
0

代わりに Y.log() を使用すると、 gallery-log-filter を使用して、出力したいログ メッセージをフィルター処理できます。

于 2012-09-05T15:55:36.293 に答える