如何在Scala(JVM)中运行JavaScript代码?

10
有没有任何库能够让我们从Scala代码中运行JavaScript代码(作为 String )?无论JavaScript代码是在JVM中运行还是在生成的JavaScript解释器中运行都不重要。
3个回答

12
如果您想使用当前的JVM进程,请使用JVM的 ScriptEngine
import javax.script.ScriptEngineManager

val engine = new ScriptEngineManager().getEngineByMimeType("text/javascript")
val result = engine.eval("1 + 1")
println(result)

这里使用Rhino适用于JDK 7,Nashorn适用于JDK 8。

Java代码和Nashorn之间的交互非常无缝。


如果您想使用新的进程,请使用带有外部JS运行时的ProcessBuilder
import java.io.ByteArrayInputStream
import scala.sys.process._

val input =  new ByteArrayInputStream("console.log(1 + 1)".getBytes)
val result = ("node" #< input).!!
println(result)

这将为您提供最快的执行速度,特别是当JS对CPU使用较多时。它还允许JS使用Node.js API,但需要安装Node.js。
如果您想使用当前的JS进程(即,如果您正在使用Scala.js),
import scala.scalajs.js

val result = js.eval("1 + 1")
println(result)

非常好的回答!谢谢! - Dyin
1
关于第二个例子,为了使其工作,应该: 1)导入scala.sys.process._ 2)将输入重定向方法修复为“ #<” - AlexY

2

尝试使用RhinoNashorn,它们都是基于Java的,但你可以从Scala中使用它们。


2

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