fly*_*ire 1 javascript java code-formatting
在我的架构中,Javascript 代码是在服务器中生成的。生成一大块 Javascript 代码,存储在 a 中java.lang.String
并发送到客户端。我想更轻松地调试生成的代码(生成和运行方式)。
有人知道格式化Javascript代码的简单方法吗?
可能为时已晚,但仍然如此。
我还没有找到流行的 Java 库来做你想做的事;但是,有许多用于此的 javascript 库(例如,js-beautify)。您可以将此类库源代码保存在应用程序的资源中(您可以从 CDN 链接之一获取代码,因此您不必手动对其进行分组和缩小),然后加载它并使用 Nashorn javascript 引擎调用它.
您的代码可能如下所示(大致):
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.InputStreamReader;
public class JavascriptBeautifierForJava {
// my javascript beautifier of choice
private static final String BEAUTIFY_JS_RESOURCE = "beautify.js";
// name of beautifier function
private static final String BEAUTIFY_METHOD_NAME = "js_beautify";
private final ScriptEngine engine;
JavascriptBeautifierForJava() throws ScriptException {
engine = new ScriptEngineManager().getEngineByName("nashorn");
// this is needed to make self invoking function modules work
// otherwise you won't be able to invoke your function
engine.eval("var global = this;");
engine.eval(new InputStreamReader(getClass().getClassLoader().getResourceAsStream(BEAUTIFY_JS_RESOURCE)));
}
public String beautify(String javascriptCode) throws ScriptException, NoSuchMethodException {
return (String) ((Invocable) engine).invokeFunction(BEAUTIFY_METHOD_NAME, javascriptCode);
}
public static void main(String[] args) throws ScriptException, NoSuchMethodException {
String unformattedJs = "var a = 1; b = 2; var user = { name : \n \"Andrew\"}";
JavascriptBeautifierForJava javascriptBeautifierForJava = new JavascriptBeautifierForJava();
String formattedJs = javascriptBeautifierForJava.beautify(unformattedJs);
System.out.println(formattedJs);
// will print out:
// var a = 1;
// b = 2;
// var user = {
// name: "Andrew"
// }
}
}
Run Code Online (Sandbox Code Playgroud)
如果您打算使用这种方法,请确保重用 JavascriptBeautifier 对象,因为在需要美化代码时重新创建一个对象并不太有效。
归档时间: |
|
查看次数: |
5417 次 |
最近记录: |