从JavaScript版本中删除console.log和其他调试代码的最佳实践?

从JavaScript版本中删除console.log和其他调试代码的最佳实践?,javascript,debugging,yui,combres,Javascript,Debugging,Yui,Combres,我见过一些控制台包装器,它们通过控制台阻止浏览器中的错误,还有一些更高级的控制台包装器,它们支持登录旧浏览器。但是我所看到的没有一个能够帮助打开和关闭调试代码 目前,我做了一个查找和替换来注释调试代码。一定有更好的办法吗 我正在使用Combres,它使用YUI缩小JavaScript。我看到一些帖子提到在缩小过程中使用双分号标记要删除的行。这是一种黑客行为还是良好做法?可能您应该在console.log()周围有自己的包装器,并通过该包装器记录调试信息。这样,一旦部署到生产环境中,就可以用空函数

我见过一些控制台包装器,它们通过控制台阻止浏览器中的错误,还有一些更高级的控制台包装器,它们支持登录旧浏览器。但是我所看到的没有一个能够帮助打开和关闭调试代码

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


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

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

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

定义您自己的调试函数,该函数将包装在
控制台上。记录
或任何您想要的内容,并确保如果将其设置为空,minifier可以轻松推断出它不是op。之后,一旦你们注释掉了函数体,大多数迷你们应该检测到并没有什么可以调用或内联的,并完全删除对你们函数的引用

下面是一个例子:

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

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

   main()
})()
我把它放进了匿名函数中,以限制
调试的范围,并且不让它被分配到窗口-这使得minifier可以轻松地决定是否需要它。当我将此代码粘贴到时,我得到:

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

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

…完全删除调试代码的所有跟踪

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

相关:。我想关键是完全删除了console.log/wrapper调用,以生成更小的缩小JS文件
(function(){alert("This is production code!")})();