我有一个复杂的 dojo 应用程序,可以在未编译的情况下正常工作,但是在使用 Google 的Closure Compiler 编译后,我在某些行为上发现了细微的差异。
事实上,调试起来非常困难,而且我无法找到任何关于使用 Google Closure 编译和未编译的 Javascript 之间可能存在的功能差异的信息。
谁能指出我已知差异的方向,或分享任何类似的经验以及从哪里开始寻找的一些想法?
我有一个复杂的 dojo 应用程序,可以在未编译的情况下正常工作,但是在使用 Google 的Closure Compiler 编译后,我在某些行为上发现了细微的差异。
事实上,调试起来非常困难,而且我无法找到任何关于使用 Google Closure 编译和未编译的 Javascript 之间可能存在的功能差异的信息。
谁能指出我已知差异的方向,或分享任何类似的经验以及从哪里开始寻找的一些想法?
VERBOSE
警告级别。这将打开所有检查。debug
旗帜。它使重命名的符号长得可笑,但它们的命名方式使您可以找到原始符号。如果代码使用该debug
标志但不能没有它,那几乎肯定是一个重命名问题。formatting=PRETTY_PRINT
. 没有它,调试压缩代码会很痛苦。--use_types_for_optimization false
。不正确的类型注释会导致编译器做出无效的假设。更新:从 20150315 编译器版本开始,默认启用基于类型的优化。
在乍得的回答的帮助下,我发现了一个错误,我的工作代码如下:
a = [b, b = a][0]; // swap variable values
被编译为:
a = b;
它可能会在以后的版本中得到修复,因为使用在线 Closure 编译器应用程序进行的测试不会显示相同的错误。通过不试图变得聪明来修复它,并在交换值时使用第三个变量来保存旧值。
我在 dojo 1.3(关闭前)中看到的几个问题: