你实际上如何在 nodejs 中 运行 scalajs 代码?

How do you actually run scalajs code in nodejs?

我正在开发后端聊天服务器。它目前是用混乱的回调 javascript 编写的,所以我正在考虑将它移植到 scalajs。

我一直在浏览初学者指南,但我找不到如何将项目实际编译为单个 javascript 文件,我可以 运行 使用节点(例如 node ./target/scala_2.11/my-project.js).

如何编译一个可以运行 直接作为节点程序而不是在浏览器中的文件?

我的代码再简单不过了:

package example

import scala.scalajs.js
import js.Dynamic.{ global => g }

object ScalaJSExample extends js.JSApp {
  def main(): Unit = {
    g.console.log("*** Did something ***")
    println("Trying to print something...")
  }
}

sbt run 正确打印:

*** Did something ***
Trying to print something...

但是当我 运行 sbt fullOptJS 然后 node ./target/scala-2.11/example-opt.js 什么都没有打印到控制台。

example-opt.js 不包含用于实际启动 代码的一行 JavaScript。它仅将 example.ScalaJSExample().main() 定义为函数,但不会 调用 它。

让它自动调用该函数的一种简单方法是指示 sbt 使用以下 sbt 设置在 .js 文件的末尾添加调用:

scalaJSOutputWrapper := ("", "example.ScalaJSExample().main();")

这样您就可以调用

node ./target/scala-2.11/example-opt.js