gpt4 book ai didi

Java:格式化Javascript代码

转载 作者:行者123 更新时间:2023-11-29 06:44:11 25 4
gpt4 key购买 nike

在我的架构中,Javascript 代码是在服务器中生成的。生成了大量的 Javascript 代码,存储在 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"
// }
}
}

如果您打算使用这种方法,请确保重用 JavascriptBeautifier 对象,因为每当您需要美化代码时重新创建一个对象并不是太有效。

关于Java:格式化Javascript代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com