Java库生成JavaScript代码

5
我需要从Java程序内部生成JavaScript(ECMAScript)代码。为此,我正在寻找类似于 JavaPoet的工具,但其输出为JavaScript。
我不能使用将其他语言转换为JavaScript的转换器(例如,GWT不是答案),也不能使用从语法树生成JavaScript的工具(仅当有帮助构建该语法树的库时...)。
类似于已提到的JavaPoet的工具将是答案,因为它在内存使用和代码大小方面的足迹非常小。
生成的JavaScript代码的目标是Java / JSR 223(Nashorn),如果这是相关的话。
为了指定要求:JavaPoet使用此代码
MethodSpec main = MethodSpec.methodBuilder("main")
    .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
    .returns(void.class)
    .addParameter(String[].class, "args")
    .addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
    .build();

TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
    .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
    .addMethod(main)
    .build();

JavaFile javaFile = JavaFile.builder("com.example.helloworld", helloWorld)
    .build();
javaFile.writeTo(System.out);

创建此Java代码
package com.example.helloworld;

public final class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello, JavaPoet!");
  }
}

(我从JavaPoet项目网站上复制了一个示例。)
我希望有类似的东西来创建JavaScript代码。
据我目前所知,StringBuilder实际上是最接近这个要求的。首先生成Java代码再将其转换为JavaScript应该可以工作,但这看起来真的很奇怪-而且一点也不轻量级。同样,先生成Kotlin或Ceylon代码然后将其转换为JavaScript也是如此。

也许是 StringBuilder?不过,说实话,你的需求不太清楚。 - Axel
Kotlin语言和Ceylon语言都可以编译成JVM和Javascript,但我想知道它们是否能满足您的需求。 - pdem
+1 我也在寻找同样的东西!我正在扩展这个 restapi-codegen-maven-plugin - Jan-Terje Sørensen
1
如果你曾经发现了一个类似于JavaPoet的JavaScript库,我会很乐意听到它的消息。 - Jorn
1个回答

0

我知道你不想要一个转译器,但是既然似乎没有符合你需求的Javascript生成器,可能一个轻量级的Java-JS转译器可以胜任这个任务。

试着用javapoet生成一些Java代码,然后将输出通过jsweet转译器处理,有一个在线沙盒可以供你在决定是否是最佳选择之前查看输出结果。


不幸的是,jsweet将System.out.println(“Hello World”);翻译为console.info(“Hello World”); - 这在Nashorn中无法工作。基本上,看起来jsweet方法需要使用jsweet特定的Java API才能获得相当复杂的JavaScript输出 - 这与我的轻量级要求冲突。 - tquadrat
是的,它是为浏览器/v8作为运行时而设计的。希望谷歌很快开源他们的新gwt编译器(j2cl),这应该是另一个轻量级的转译器,也许可以满足您的需求。 - Mcm
1
我为JSweet做出了贡献,现在在v2中它是完全灵活的:用符合Nashorn的“print”替换Sysout非常容易。据我所知,JSweet的想法是将简单的Java转译为简单的Javascript。话虽如此,如果你想编写自己的打印机,JSweet API(v2)绝对是你想尝试的东西。它现在高度可扩展。 例如:https://github.com/cincheo/jsweet/blob/master/doc/jsweet-language-specifications.md#extending-the-transpiler - Louis GRIGNON

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接