如何更改未导出到命令行的Closure Compiler编译选项?

时间:2012-11-09 03:08:13

标签: google-closure-compiler

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

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

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

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

c.compile(.....);

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

有什么简单的想法吗?

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

为了尝试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;
....

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

这是现在已编译的代码:

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

似乎它将其导出。

虽然我想要这个:

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

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

实际上,这是类似google_map的编译。

这可能吗?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

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

  1. 构建编译器的自定义版本
  2. 使用Java APIsee example)。
  3. 使用plovr
  4. 获得与Maps API相同级别的压缩和混淆需要专门为编译器编写的代码。正确编写后,您将看到属性和命名空间崩溃,原型别名以及其他所有内容。有关优化该方式的代码样式的示例,请查看Closure Library

答案 2 :(得分:0)

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

  

Closure Compiler包含许多仅在Java中以编程方式提供的选项。其中许多选项都是实验性的或未最终确定的,因此它们可能不是API的永久部分。然而,其中许多对你今天都有用,所以plovr试图揭示这些实验 - 编译 - 选项选项。在引擎盖下,它使用Java中的反射,所以它相当hacky,但实际上, 是一种在不编写Java代码的情况下试验Closure Compiler选项的便捷方式。