无法从 HTML 调用 scala.js 生成的 JavaScript:"ReferenceError"

scala.js's generated JavaScript cannot be called from HTML: "ReferenceError"

我用这个非常简单的 "application":

建立了一个非常简单的 scala.js 项目
package example

import org.scalajs.dom._

import scala.scalajs.js.JSApp

class EverythingWorks extends JSApp {

  def main() = {
    console.log("It works!")
  }
}

对应的 HTML 如下所示:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
<script type="text/javascript" src="js/app.js"></script>
<script type="text/javascript">
    example.EverythingWorks().main();
</script>
</body>
</html>

现在,我做了 sbt fastOptJS,将生成的 JS 文件复制到 js/app.jsapp.js 旁边的 js.map 文件。

我没有在控制台上打印 "It works!",而是 ReferenceError: example is not defined。我仔细检查了 app.js 是从 HTML.

中找到的

我错过了什么?

您的主要 class 应该是 object,而不是 class

ScalaJS 构建过程 "dead code elimination." 这显着减少了构建的大小。然而,除非你告诉它你的一些顶级东西不是死代码,否则它将被淘汰。

这意味着你必须使用 @JSExport 注释来告诉 ScalaJS 不要删除你的顶级方法和对象。

来自this introduction,示例代码:

@JSExport
object ScalaJSExample {
  @JSExport
  def main(canvas: html.Canvas): Unit = {