无法从 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.js
和 app.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 = {
我用这个非常简单的 "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.js
和 app.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 = {