CanvasRenderingContext2D resetTransform 和 google 闭包编译器
CanvasRenderingContext2D resetTransform and google closure compiler
我偶然发现了 google 闭包编译器、高级模式的奇怪行为,我找不到解释:它重命名了 CanvasRenderingContext2D 的函数 resetTransform
由于问题出现在生产代码中,我无法在此处复制粘贴,但我已经能够在此处的案例中重现该问题
https://www.dropbox.com/s/ic9l755dvgkkqv7/case.zip?dl=0
不清楚的问题片段是:
context.resetTransform ()
context.translate ( 0 , canvas.height )
对应编译器输出:
c.a();c.translate(0,b.height);
如果我没记错的话,resetTransform 应该保留它的名字,就像 CanvasRenderingContext2D 的其他成员一样,例如,翻译。
浏览器找不到 "a" 函数并生成 "TypeError: c.a is not a function"
"c" 实际上是 CanvasRenderingContext2D 的一个实例,事实上,如果我将 c.a 更改为 c.resetTransform,脚本将完美运行。
我做错了什么?
在任何地方都找不到关于这个问题的参考资料
目前我使用的是最新的编译器版本,下载自:
https://dl.google.com/closure-compiler/compiler-latest.zip
java 版本 si 1.7.0_80,但问题仍然存在,即使使用旧版本
resetTransform
被标记为 experimental feature on mozilla.org which explains why it is not yet present in closure_compiler/externs/browser/html5.js
。因此,闭包编译器不知道不缩小该名称。
如果可以 build closure-compiler from source(这很容易做到),那么您可以向 html5.js
添加类似
的内容
/**
* @return {undefined}
*/
CanvasRenderingContext2D.prototype.resetTransform = function() {};
然后重建编译器。 IIRC,必须重建编译器才能使外部文件的更改生效。
您还可以在 https://github.com/google/closure-compiler/issues/ 提交问题或拉取请求并添加 API.
可能有一种方法可以调用 resetTransform
而无需在高级编译模式下将其缩小。 Closure-compiler 不会缩小通过方括号访问的属性。
(/** Function */mycontext['resetTransform'])();
我从未尝试过,但我认为这会奏效。使闭包编译器对语法满意的确切表达式可能需要一些调整。
instructions for building closure-compiler 目前有点搞砸了。以下是一些基本说明:
获取闭包编译器存储库的本地副本:
git clone https://github.com/google/closure-compiler.git
稍后您可以根据需要使用
更新您的副本
git pull
构建
ant clean
ant jar
检查版本:
java -jar build/compiler.jar --version
我偶然发现了 google 闭包编译器、高级模式的奇怪行为,我找不到解释:它重命名了 CanvasRenderingContext2D 的函数 resetTransform
由于问题出现在生产代码中,我无法在此处复制粘贴,但我已经能够在此处的案例中重现该问题 https://www.dropbox.com/s/ic9l755dvgkkqv7/case.zip?dl=0
不清楚的问题片段是:
context.resetTransform ()
context.translate ( 0 , canvas.height )
对应编译器输出:
c.a();c.translate(0,b.height);
如果我没记错的话,resetTransform 应该保留它的名字,就像 CanvasRenderingContext2D 的其他成员一样,例如,翻译。 浏览器找不到 "a" 函数并生成 "TypeError: c.a is not a function"
"c" 实际上是 CanvasRenderingContext2D 的一个实例,事实上,如果我将 c.a 更改为 c.resetTransform,脚本将完美运行。
我做错了什么?
在任何地方都找不到关于这个问题的参考资料
目前我使用的是最新的编译器版本,下载自: https://dl.google.com/closure-compiler/compiler-latest.zip
java 版本 si 1.7.0_80,但问题仍然存在,即使使用旧版本
resetTransform
被标记为 experimental feature on mozilla.org which explains why it is not yet present in closure_compiler/externs/browser/html5.js
。因此,闭包编译器不知道不缩小该名称。
如果可以 build closure-compiler from source(这很容易做到),那么您可以向 html5.js
添加类似
/**
* @return {undefined}
*/
CanvasRenderingContext2D.prototype.resetTransform = function() {};
然后重建编译器。 IIRC,必须重建编译器才能使外部文件的更改生效。
您还可以在 https://github.com/google/closure-compiler/issues/ 提交问题或拉取请求并添加 API.
可能有一种方法可以调用 resetTransform
而无需在高级编译模式下将其缩小。 Closure-compiler 不会缩小通过方括号访问的属性。
(/** Function */mycontext['resetTransform'])();
我从未尝试过,但我认为这会奏效。使闭包编译器对语法满意的确切表达式可能需要一些调整。
instructions for building closure-compiler 目前有点搞砸了。以下是一些基本说明:
获取闭包编译器存储库的本地副本:
git clone https://github.com/google/closure-compiler.git
稍后您可以根据需要使用
更新您的副本git pull
构建
ant clean
ant jar
检查版本:
java -jar build/compiler.jar --version