CanvasRenderingContext2D resetTransform和google closure编译器

时间:2016-04-14 10:16:09

标签: javascript html5-canvas google-closure-compiler

我偶然发现谷歌闭包编译器,ADVANCED模式的奇怪行为,我无法找到解释:它重命名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不是函数"

" C"实际上,如果我将c.a更改为c.resetTransform,则该脚本实际上是一个CanvasRenderingContext2D的实例。

我做错了什么?

在任何地方都找不到关于这个问题的引用

目前我正在使用最新的编译器版本,从以下网址下载:   https://dl.google.com/closure-compiler/compiler-latest.zip

java version si 1.7.0_80,但问题仍然存在,即使是较旧的

1 个答案:

答案 0 :(得分:1)

resetTransform在mozilla.org上被标记为experimental feature,这解释了closure_compiler/externs/browser/html5.js中尚未出现的原因。因此,Closure-compiler不知道不缩小该名称。

如果你可以build closure-compiler from source(很容易做到),那么你可以添加html5.js之类的内容

/**
 * @return {undefined}
 */
CanvasRenderingContext2D.prototype.resetTransform = function() {};

然后重建编译器。 IIRC,必须重建编译器以更改externs文件才能产生任何效果。

您还可以使用添加的API在https://github.com/google/closure-compiler/issues/处提交问题或提取请求。

可能有一种方法可以在高级编译模式下调用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