7

我已经看到一些控制台包装器可以通过控制台来阻止浏览器中的错误,而更高级的包装器可以在旧浏览器中启用日志记录。但是我没有看到任何帮助打开和关闭调试代码。

目前我做了一个查找和替换来注释掉调试代码。一定会有更好的办法?

我正在使用 Combres,它使用 YUI 来缩小 JavaScript。我看过一些帖子提到使用双分号来标记要在缩小过程中删除的行。这是一个技巧还是好的做法?

4

4 回答 4

2

可能您应该拥有自己的包装器console.log()并通过该包装器记录您的调试信息。这样,一旦部署到生产环境,您就可以用空函数替换该单个函数,这样控制台就不会充斥着调试信息。您也可以console.log用空函数替换实际函数,但这会阻止任何Javascript 输出到控制台,而不仅仅是您的。

于 2012-09-05T10:21:33.820 回答
1

如果您查看 YUI 框架是如何做到的,他们实际上使用了一个正则表达式并从源代码生成 3 个文件。一个具有日志记录-调试,一个具有日志记录剥离,只有文件名,以及一个没有日志记录的缩小版本。然后你可以设置一个全局配置来说明你想要哪个版本。我过去就是这样工作的,而且效果很好。

于 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并且不让它分配给窗口 - 这允许 minifier 轻松决定是否有必要。当我将此代码粘贴到在线 GCC时,我得到:

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

但是一旦我添加//之前console.log使debug空,GCC将其编译为:

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

...完全删除调试代码的所有痕迹!

于 2012-09-05T11:37:58.387 回答
0

请改用 Y.log(),然后您可以使用 gallery-log-filter 过滤您希望看到打印的日志消息。

于 2012-09-05T15:55:36.293 回答