调试闭包编译器编译的Javascript
我有一个复杂的dojo应用程序,可以正常运行,但在使用Google的编译后,我在一些行为上得到了细微的差异 事实上,调试非常困难,而且我无法找到任何关于编译和未编译Javascript与googleclosure之间可能存在的功能差异的信息 有谁能告诉我已知差异的方向,或者分享类似的经验和从哪里开始寻找的想法吗?通用闭包编译器调试技巧调试闭包编译器编译的Javascript,javascript,dojo,google-closure-compiler,Javascript,Dojo,Google Closure Compiler,我有一个复杂的dojo应用程序,可以正常运行,但在使用Google的编译后,我在一些行为上得到了细微的差异 事实上,调试非常困难,而且我无法找到任何关于编译和未编译Javascript与googleclosure之间可能存在的功能差异的信息 有谁能告诉我已知差异的方向,或者分享类似的经验和从哪里开始寻找的想法吗?通用闭包编译器调试技巧 使用VERBOSE警告级别。这将打开所有检查 使用debug标志。它使重命名的符号长得可笑,但它们的命名方式可以让您找到原始符号。如果代码使用debug标志,但
- 使用
警告级别。这将打开所有检查VERBOSE
- 使用
标志。它使重命名的符号长得可笑,但它们的命名方式可以让您找到原始符号。如果代码使用debug
标志,但不是没有它,那么几乎可以肯定这是一个重命名问题debug
- 一定要使用
。没有它调试压缩代码是痛苦的formatting=PRETTY\u PRINT
- 使用
- 使用
。不正确的类型批注会导致编译器做出无效的假设禁用基于类型的优化--使用\u types\u进行\u优化false
更新:自20150315编译器发行版起,基于类型的优化默认启用。我在dojo 1.3(预关闭)中看到的几个问题:
- 如果您有一个名为class的类属性,则需要引用它。所以{class:“css”}需要写成{class:“css”}这包括任何小部件字段
- 确保删除所有调试器语句
a = [b, b = a][0]; // swap variable values
汇编的目的是:
a = b;
它可能会在以后的版本中修复,因为在线闭包编译器应用程序的测试不会显示相同的错误。通过不耍聪明,在交换值时使用第三个变量保存旧值来修复此问题。没有线索。但你可能想给丑八怪一个机会。我是一个超级粉丝。@AlexWayne肯定想结束-dojo构建系统与它配合得特别好。您使用的优化级别是什么?您可以在此处阅读闭包编译器的一些限制:@Bart SIMPLE_OPTIMIZATIONS-代码库中没有带语句的
,只有一个eval
,它很简单,与我看到的bug毫无关系。感谢Chad,通过此帮助发现了问题,查看我的补充答案:chrome中的Dsource maps很有趣,我总是忘记源地图-添加到答案中。我找不到解决此问题的确切问题,但我会提出并确保。如果没有,我们一定会看看这个。哦,哇,谢谢!我会看看我是否能为您准备一个复制案例,版本为。