我有一个复杂的 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(关闭前)中看到的几个问题: