我正在开发一个后端聊天服务器.它目前写在凌乱的回调JavaScript中,所以我正在考虑将其移植到scalajs.
我一直在查看初学者的指南,但我找不到如何将项目实际编译为单个javascript文件,我可以使用node(例如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...")
}
}
Run Code Online (Sandbox Code Playgroud)
sbt run 正确打印:
*** Did something ***
Trying to print something...
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时sbt fullOptJS,node ./target/scala-2.11/example-opt.js没有任何东西打印到控制台.
在example-opt.js不包含JavaScript的一条线用于实际启动代码.它只定义example.ScalaJSExample().main()为一个函数,但它不会调用它.
让它自动调用该函数的一种简单方法是指示sbt .js使用此sbt设置在文件末尾添加调用:
scalaJSOutputWrapper := ("", "example.ScalaJSExample().main();")
Run Code Online (Sandbox Code Playgroud)
这将允许您只是调用
node ./target/scala-2.11/example-opt.js
Run Code Online (Sandbox Code Playgroud)