为了进一步澄清,我的意思是Closure编译器输出JavaScript的哪些部分?
我可以理解,如果这是一个移动目标,由于游戏的名称是代码优化,所以如果是这种情况,那么对源代码的相关位的引用可能是最有用的。
答案 0 :(得分:5)
闭包编译器的限制are specified in the docs:
编译器仅识别ECMAScript。 ECMAScript 5是几乎所有地方都支持的JavaScript版本。但是,编译器还支持ECMAScript 6中的许多功能。编译器仅支持官方语言功能。
- 编译器不会保留评论。
- 当您使用
with
时,编译器无法区分本地变量和同名的对象属性,因此它会重命名该名称的所有实例。- 编译器没有解析
eval
()的字符串参数,因此它不会重命名此参数中的任何符号。- 编译器重命名函数和函数参数,但不会更改代码中按名称引用函数或参数的任何字符串。
- 为了正确地重命名全局变量,函数和属性,编译器必须知道对这些全局变量的所有引用。您必须告诉编译器有关在编译代码之外定义的符号。 Advanced Compilation和Externs描述了如何声明外部符号。
- 编译代码必须导出未编译代码所引用的任何符号。 Advanced Compilation和Externs描述了如何导出符号。
- 编译器在高级模式下重命名属性,但它永远不会重命名字符串。如果需要引用带引号字符串的属性,请始终使用带引号的字符串:
- 编译器独立重命名属性和变量
- 当您编译函数而不编译调用这些函数的代码时,编译器会假定函数永远不会被调用并将其删除。
- 属性展平可以在函数中改变关键字this的含义。
- 使用Object.defineProperties或ES6 getter / setter:编译器不能很好地理解这些结构。
如果要使用结果检查语法树 - 但闭包编译器的输出是ES5或ES3,它们不保证输出代码中使用的实际功能。有关确切支持,请参阅"JavaScript supported by Closure Compiler "。