1

我发现 CompilerOption 中的某些选项没有导出到命令行。

例如,alias all strings在 Closure Compiler 的 Java API CompilerOption 中可用,但我不知道如何在命令行中设置它。

我知道我可以创建一个新的 java 类,例如:

Compiler c = new Compiler();
ComppilerOptions opt = new ComppilerOptions();
opt.setAliasAllString(true);

c.compile(.....);

但是我必须自己处理命令行参数。

有什么简单的想法吗?

==============================

为了尝试该alias all string选项,我编写了一个基于 compiler.jar 的简单命令行应用程序。

但是我发现,打开时得到的结果alias all string不是我所期望的。

例如:

a["prototype"]["say"]=function(){
  var a="something string";
}

给定上面的代码,something string将被一个像这样的变量替换:

var xx="something string";

....
var a=xx;
....

这很好,但是字符串“say”怎么样?闭包编译器如何知道这应该是别名(替换它使用变量)或导出(导出此方法)?

这是现在编译的代码:

a.prototype.say=function(){....}

它似乎导出它。

虽然我想要这个:

var a="prototype",b="say",c="something string";

xx[a][b]=function(){.....}

其实这就是类似google_map的编译。

这可能吗?

4

3 回答 3

1

如果您只想玩,修改http://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/javascript/jscomp/CompilationLevel.java?r=706通常很容易有东西。

于 2012-11-09T06:55:59.843 回答
1

并非所有选项都可从命令行获得 - 这包括 aliasAllStrings。对于其中一些,您有以下选择:

  1. 构建自定义版本的编译器
  2. 使用Java API参见示例)。
  3. 使用plovr

获得与 Maps API 相同级别的压缩和混淆需要专门为编译器编写的代码。如果编写得当,您会看到属性和命名空间崩溃、原型别名以及其他一大堆问题。有关以这种方式优化的代码样式示例,请查看Closure Library

于 2012-11-12T13:19:21.703 回答
0

Plovr(一个 Closure 构建工具)提供了一个名为 的选项experimental-compiler-options,文档如下:

Closure Compiler 包含许多仅在 Java 中以编程方式可用的选项。其中许多选项是实验性的或尚未最终确定,因此它们可能不是 API 的永久部分。尽管如此,它们中的许多今天对你还是有用的,所以 plovr 尝试公开这些实验编译器选项选项。在底层,它使用 Java 中的反射,因此它相当 hacky,但在实践中,它是一种无需编写 Java 代码即可试验 Closure Compiler 选项的便捷方式。

于 2012-11-09T04:30:59.133 回答