4

我有一个复杂的 dojo 应用程序,可以在未编译的情况下正常工作,但是在使用 Google 的Closure Compiler 编译后,我在某些行为上发现了细微的差异。

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

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

4

3 回答 3

9

通用闭包编译器调试技巧

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

更新:从 20150315 编译器版本开始,默认启用基于类型的优化。

于 2013-01-03T21:46:09.247 回答
1

在乍得的回答的帮助下,我发现了一个错误,我的工作代码如下:

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

被编译为:

a = b;

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

于 2013-01-03T23:55:05.563 回答
0

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

  • 如果您有一个名为 class 的类属性,则需要引用它。所以 {class: "css"} 需要写成 {"class": "css"} 这包括任何小部件字段。
  • 确保删除任何调试器语句。
于 2013-01-03T22:00:28.280 回答