使用Java API格式化JavaScript

Nar*_*rma 6 javascript java velocity

我在java中使用velocity生成JavaScript代码.

例如:我生成了JavaScript并得到了以下字符串:

importClass(java.util.ArrayList); function fun(arg) { if (true){ return true;} else{    return true;}}
Run Code Online (Sandbox Code Playgroud)

是否有任何Java API采用此String并以下面的方式格式化此JavaScript:

importClass(java.util.ArrayList);

function fun(arg) { 
   if (true){ 
       return true;
   }
   else{
    return true;
   } 
}
Run Code Online (Sandbox Code Playgroud)

eye*_*hUp 2

闭包编译器

您可以使用 Google 的Closure Compiler
它格式化、压缩、优化并查找 JavaScript 代码中的错误。

要快速了解它的功能,您可以尝试 Web 服务


例子

对于您的示例字符串,

importClass(java.util.ArrayList); function fun(arg) { if (true){ return true;} else{    return true;}}
Run Code Online (Sandbox Code Playgroud)

如果您只想格式化它,请使用编译选项“Whitespace only”“Pretty print”,它返回:

importClass(java.util.ArrayList);
function fun(arg) {
  if(true) {
    return true
  }else {
    return true
  }
}
;
Run Code Online (Sandbox Code Playgroud)

无论如何,使用 Closure 编译器,您有多种选项来优化和/或格式化输入代码(以字符串或文件 URI 形式给出),并将优化/格式化的 JS 作为字符串返回或将其保存到文件中。

我真的推荐使用“简单”优化模式。对于较长的 Javascript,它确实可以为您节省大量不需要的字节。另外,它还可以加快脚本执行速度!

对于您的示例字符串,编译选项“Simple”(而不是“Whitespace only”)和“Pretty print”返回

importClass(java.util.ArrayList);
function fun() {
  return!0
}
;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,两个函数的结果fun()是相同的(布尔值true)。
然而,第二个已经删除了所有无用的代码(通过保留有效性!)并且执行速度会更快。


下载与参考

现在,实际的编译器是用 Java 编写的,并且可以作为命令行实用程序进行下载(更新 2014-07-10:新的下载链接)。

作为第二个选项,您可以实现自己的包装类来与 REST API 进行通信(就像我对 PHP 所做的那样)。不需要太多的努力/代码。

更多信息请参见:
Google 代码项目页面
入门常见
问题解答:如何从 Java API 调用 Closure Compiler?
REST API 参考

希望有帮助。