【问题标题】:How do you actually run scalajs code in nodejs?您如何在 nodejs 中实际运行 scalajs 代码?
【发布时间】:2016-04-18 05:05:07
【问题描述】:

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

我一直在浏览初学者指南,但我找不到如何将项目实际编译为可以使用 node 运行的单个 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 fullOptJSnode ./target/scala-2.11/example-opt.js 时,控制台不会打印任何内容。

【问题讨论】:

  • 为什么不直接在 sbt 中输入run
  • 你如何部署它?
  • 你没有 :) 但公平地说,sbt 本身并不能部署。

标签: node.js scala.js


【解决方案1】:

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

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

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

这将允许您调用

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

【讨论】:

  • 谢谢,我差点以为我必须手动编写一个包装器。
  • @sjrd 在我的 POC 中使 run 启动代码两次。有什么办法可以避免吗?
猜你喜欢
  • 1970-01-01
  • 2015-02-22
  • 2016-07-15
  • 2020-03-06
  • 2021-01-05
  • 1970-01-01
  • 2017-06-10
  • 2015-07-15
  • 2017-10-28
相关资源
最近更新 更多