调试闭包编译器编译Javascript

Debugging Closure-compiler Compiled Javascript

本文关键字:Javascript 编译 编译器 闭包 调试      更新时间:2023-09-26

我有一个复杂的dojo应用程序,工作正确未编译,但与谷歌的闭包编译器编译后,我得到一些行为的微妙差异。

事实上,它非常难以调试,并且我无法找到任何关于使用Google Closure编译和未编译Javascript之间可能存在的功能差异的信息。

谁能给我指出已知差异的方向,或者分享任何类似的经历和一些从哪里开始寻找的想法?

通用闭包编译器调试提示

  • 使用VERBOSE告警级别。这将打开所有的检查。
  • 使用debug标志。它使重命名的符号长得可笑,但它们的命名方式可以找到原始符号。如果代码工作与debug标志,但不能没有它,这几乎肯定是一个重命名问题。
  • 绝对使用formatting=PRETTY_PRINT。如果没有它,调试压缩代码会很痛苦。
  • 使用源映射
  • 使用--use_types_for_optimization false禁用基于类型的优化。不正确的类型注释会导致编译器做出无效的假设。

更新:自20150315编译器发布以来,默认情况下启用基于类型的优化

在Chad的回答的帮助下,我发现了一个bug,我的工作代码如下:

a = [b, b = a][0]; // swap variable values

被编译为:

a = b;

在以后的版本中可能会修复,因为使用在线Closure编译器应用程序的测试不会显示相同的错误。修正它不试图是聪明的,并使用第三个变量来保存旧的值,而交换值

我在dojo 1.3(预关闭)中看到的几个问题:

  • 如果你有一个名为class的类属性,它需要加引号。所以{class: "css"}需要写为{"class": "css"},这包括任何小部件字段。
  • 确保你删除了所有的调试器语句。