调试闭包编译器编译Javascript
Debugging Closure-compiler Compiled Javascript
我有一个复杂的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"},这包括任何小部件字段。
- 确保你删除了所有的调试器语句。
相关文章:
- 如何在Windows中将Javascript文件编译成二进制文件
- Javascript赢得'不能在IE上编译,但可以在Chrome上运行
- ScriptEngineManager能给我它刚刚用Java编译的Javascript函数的名称吗
- 在JavaScript中编译搜索后,获取链接到函数的属性标记的Element
- 只使用常量的静态javascript函数会被编译为常量吗
- V8 javascript 引擎是否将所有 javascript 编译为机器语言
- 在 Java 环境中编译为 javascript 的模板
- 无法使用 ant 和闭包编译器编译 javascript,因为 Jquery 的 $ 是未声明的
- Webpack:是否可以在编译时评估javascript表达式
- 必须对 JavaScript 进行哪些更改才能使其可编译为二进制
- 在 JavaScript 中编译/解释 Razor 视图
- 有没有办法使用 Gradle 将 Kotlin 类编译为 JavaScript
- 使用javascript编译html并将其转储到文件中
- Asp.Net Javascript编译错误:"标识符预期"
- 当我将所有javascript编译为一个文件时,我如何检测页面
- 为什么最好将javascript编译成javascript
- 让Javascript编译/测试
- Javascript 编译,用于将 D3 js v3 迁移到 v4
- 究竟什么是 JavaScript 编译指示
- 是否有人使用或编写了Ant任务来将(Rhino)JavaScript编译为Java字节码