javascript - 如何从 Scala (JVM) 中运行 JavaScript 代码?

标签 javascript scala

是否有任何库允许我们从 Scala 代码运行 JavaScript 代码(作为 String)? JavaScript 代码是在 JVM 中运行还是在生成的 JavaScript 解释器中运行并不重要。

最佳答案

如果要使用当前的JVM进程,使用JVM的ScriptEngine

import javax.script.ScriptEngineManager

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

这对 JDK 7 使用 Rhino,对 JDK 8 使用 Nashorn。

Java 代码和 Nashorn 之间的交互相当无缝。


如果您想使用新进程,请将 ProcessBuilder 与外部 JS 运行时一起使用。

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)

关于javascript - 如何从 Scala (JVM) 中运行 JavaScript 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36764639/

相关文章:

javascript - 如何在 wordpress 的 css 编辑器上合并 javascript?

Scala:如何 "store"var 中的函数?

scala - elasticsearch-spark 连接器大小限制参数在查询中被忽略

scala - 如何设计 Spark 应用,让 Shuffle 数据在一些迭代后自动清理

javascript - 克隆每个元素追加下一个元素

javascript - 我怎样才能让 AngularJS 绑定(bind)与花式框对话框一起工作?

scala - 处理容器停止/重新加载事件

scala - 在包对象中使用案例类时类型不匹配

javascript - 按时间间隔链接相似元素修改

javascript - 仅在 IE9 上出现 JS 错误 "Object expected"